修改Swift可选变量的getter

时间:2018-02-28 12:12:32

标签: swift

我有可选的字符串。想要的是,当尝试访问它时,变量会抛出错误,如果它为空或空。我想要这样的东西:

var myString: String? {
    get {
    guard !self.isEmpty || self == nil else { // throw error }
    return self
    }
}

是否可以在Swift中编写?感谢。

2 个答案:

答案 0 :(得分:1)

首先注意myString不能是nil,因为它不是可选的。如果您想允许存储nil,请将其声明为可选:

var myString: String?

检查self == nil是多余的,因为如果selfnil,则永远无法访问此属性并且您不能从计算属性中抛出异常,因此抛出不会工作

你可以将它声明为private并提供一个getter方法,可以检查它是nil还是空并且相应地抛出     }

如果您不希望myString成为nil,请不要将其声明为可选。如果您不希望字符串为空,请在设置字符串时避免使用该字符串。

private(set) myString: String // You cannot set the string directly outside of the class but you can access it freely

func setMyString(withValue value: String)
{
    if (value.isEmpty)
    {
        throw ... // 
    }

    myString = value
}

关于投掷错误,请检查此link

答案 1 :(得分:1)

在swift中,计算属性不能抛出异常 - 如果你想确定,请查看Swift 4.1语言参考的Throwing Functions and Methods部分。因此,即使代码的其余部分有意义,您也不能从计算属性中抛出异常。

无论如何,测试self == nil毫无意义 - self真的不能为零。如果一个对象是nil,它就不存在,因此你无法访问它的任何属性/方法(它不存在,你会访问什么?)。

例如,如果您尝试拨打yourObject?.myString,则myString的getter将不会被执行,因为yourObject为nil,它不存在。如果您尝试使用!强制它,它会立即崩溃。