swift – 强制解包变量不好?

前端之家收集整理的这篇文章主要介绍了swift – 强制解包变量不好?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的导师向我们介绍了(!)操作符,然后告诉我们不要再使用它了。告诉我们为什么当然,如果可选项为零,它会崩溃我们的应用程序。

然而,我发现自己处于像这样的情况,爆炸操作符似乎是最简洁和安全的选择。

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

猜你在找的Swift相关文章