我有可选的字符串。想要的是,当尝试访问它时,变量会抛出错误,如果它为空或空。我想要这样的东西:
var myString: String? {
get {
guard !self.isEmpty || self == nil else { // throw error }
return self
}
}
是否可以在Swift中编写?感谢。
答案 0 :(得分:1)
首先注意myString
不能是nil
,因为它不是可选的。如果您想允许存储nil
,请将其声明为可选:
var myString: String?
检查self == nil
是多余的,因为如果self
为nil
,则永远无法访问此属性并且您不能从计算属性中抛出异常,因此抛出不会工作
你可以将它声明为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,它不存在。如果您尝试使用!
强制它,它会立即崩溃。