这是我们在OC中处理属性(property)的方式
- (void)setText:(NSString *)text
{
if ([text isEqualToString:@"ss"]) {
_text = @"xx";
return
}
_text = text;
}
- (NSString *)text
{
return _text;
}
在swift中这是错误的方式,我们不能在set中调用self.xx。
var text : NSString {
get {
return self.text
}
set {
if newValue.isEqualToString("ss") {
self.text = "xx"
} else {
self.text = newValue
}
}
}
我的问题是如何将 OC 代码转换为 Swift 代码。
最佳答案
您将存储 属性与计算 属性混淆了。
只有计算属性有一个 getter 和一个可选的 setter;存储的属性也没有。此外,计算属性中的 setter 不在那里设置计算属性的值(它不能,因为属性是计算的并且没有独立存在);相反,它用于设置其他 属性的值,这些属性的值用于在下次访问时计算计算属性。参见 this post举个例子。
现在,存储的属性可以有属性观察者。在您的具体示例中,它看起来像这样:
var text : NSString! {
didSet {
if text.isEqualToString("ss" as NSString) {
text = "xx" as NSString
}
}
}
你也可以有一个 willSet
block 。请注意,在 Swift 1.2 中,NSString 和 String 不再自动桥接,因此您需要在必要时将它们相互转换。
关于objective-c - 如何处理存储属性的集合并快速获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29692189/