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