我的导师向我们介绍了(!)操作符,然后告诉我们不要再使用它了。告诉我们为什么当然,如果可选项为零,它会崩溃我们的应用程序。
然而,我发现自己处于像这样的情况,爆炸操作符似乎是最简洁和安全的选择。
func fullName() -> String { if middleName == nil { return "\(firstName) \(lastName)" }else{ return "\(firstName) \(middleName!) \(lastName)" } }
有没有更好的方法来做这样的事情?
另外,如果有人在想,这是全课。
class CPerson{ var firstName: String var middleName: String? var lastName: String init(firstName: String,middleName: String?,lastName: String) { self.firstName = firstName self.middleName = middleName self.lastName = lastName } convenience init(firstName: String,lastName: String) { self.init(firstName: firstName,middleName: nil,lastName: lastName) } func fullName() -> String { if middleName == nil { return "\(firstName) \(lastName)" }else{ return "\(firstName) \(middleName!) \(lastName)" } } }
我的导师说:“如果我看到你使用轰炸机运算符,我们要打”O_O“
使用if或guard构造:
func fullName() -> String { if let middleName = middleName { return "\(firstName) \(middleName) \(lastName)" } else { return "\(firstName) \(lastName)" } } func fullName() -> String { guard let middleName = middleName else { return "\(firstName) \(lastName)" } return "\(firstName) \(middleName) \(lastName)" }
我已经把警卫声明放在了完整性之中,但是正如其他人所言,这更常见于错误/失败案例。
我也建议不要使用字符串插入字符串。它们已经是字符串,不需要在新的字符串中使用每个名称的描述。
考虑返回firstName“”lastName。当字符串插值可能返回意外结果的情况,请参见Difference between String interpolation and String initializer in Swift。