objective-c - 如何处理存储属性的集合并快速获取

标签 objective-c swift properties set

这是我们在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/

相关文章:

ios - UIView无限360度旋转动画?

ios - 从随机索引中选取数组中的对象时如何防止重复

swift - 在主应用程序发布的 Today Widget 中观察通知

java - 在xml中定义Spring @PropertySource 并在Environment中使用

php - PHP 类属性可以等于另一个类属性吗?

c# - 数组属性初始化

ios - 在 iPhone 上处理时如何使 iPad 上的 iOS 推送通知无效?

objective-c - 如何在iOS 11上检测无线充电新iPhone8/X

ios - unwindToViewController 外的 Swift 属性 nil

ios - UIPanGestureRecognizer 为什么以及如何使 UISwipeGestureRecognizer 静音,而 UITapGestureRecognizers 默认情况下不会相互静音?