我的导师向我们介绍了(!)操作符,然后告诉我们不要再使用它了。告诉我们为什么当然,如果可选项为零,它会崩溃我们的应用程序。
然而,我发现自己处于像这样的情况,爆炸操作符似乎是最简洁和安全的选择。
- 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。