如何处理存储的属性集并获取 swift

how to deal with stored properties's set and get in swift

这是我们在OC属性中的处理方式

- (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,但在您的情况下,您可以只使用 属性 观察者 didSet.

var text: String! {
    didSet {
        if text == "ss" {
            text = "xx"
        }
    }
}

你可以这样试试!

var text: NSString = ""

        var newText : NSString {
            get {
                return text
            }
            set {
                if newValue.isEqualToString("ss") {
                    text = "xx"
                } else {
                    text = newValue
                }
            }
        }

您将 stored 属性与 computed 属性混淆了。

只有计算属性有一个 getter 和一个可选的 setter;存储的属性也没有。此外,计算的 属性 中的 setter 不在那里设置计算的 属性 的值(它不能,因为 属性 是计算的并没有独立存在);相反,它用于设置 other 属性的值,这些属性的值用于计算下一次访问时计算出的 属性。有关示例,请参阅

现在,存储属性可以有 属性 个观察者。在您的具体示例中,它看起来像这样:

var text : NSString! {
    didSet {
        if text.isEqualToString("ss" as NSString) {
            text = "xx" as NSString
        }
    }
}

你也可以有一个willSet块。请注意,在 Swift 1.2 中,NSString 和 String 不再自动桥接,因此您需要在必要时将它们相互转换。