【问题标题】:Named Obj-C Property Getters and Setters in SwiftSwift 中命名的 Obj-C 属性获取器和设置器
【发布时间】:2015-09-08 11:19:19
【问题描述】:

我正在寻找一个通用的解决方案来访问:

  1. Obj-C 来自 Swift 的命名属性获取器和命名属性设置器
  2. 符合具有 readonly 属性的 Objective-C @protocol

类似于Creating an Objective-C equivalent Getter and Setter in Swift已关闭,但没有提供令人满意的答案。


Objective-C 到 Swift 属性示例:

我的 Objective-C 协议定义了两个有问题的属性,一个带有自定义 getter isEnabled,另一个带有私有 setter exists

@protocol SomeProtocol <NSObject>
@property (nonatomic, assign, getter = isEnabled) BOOL enabled;
@property (nonatomic, readonly) BOOL exists;
@end

如何从 Swift 访问这些 Objective-C 属性?

这似乎不起作用:

func isEnabled() -> Bool { return self.enabled }

也没有:

var isEnabled:Bool {
    get { }
    set { }
}

【问题讨论】:

    标签: objective-c swift


    【解决方案1】:

    直接来自documentation

    必要时使用@objc() 属性为属性和方法提供Objective-C 名称。例如,您可以在 Objective-C 中将一个名为 enabled 的属性标记为具有一个名为 isEnabled 的 getter,如下所示:

    斯威夫特

    var enabled: Bool { @objc(isEnabled) get { /* ... */ } }

    Swift 中命名的 Objective-C Getter 属性

    var _enabled:Bool = false
    var enabled:Bool {
        @objc(isEnabled) get {
            return self._enabled
        }
        set(newValue){
            _enabled = newValue
        }
    }
    

    readonly Swift 中的 Objective-C 属性

    任一

    var _exists:Bool = false
    private(set) var exists:Bool {
        get{
            return self._exists
        }
        set(newValue){
            self._exists = newValue
        }
    }
    

    var _exists:Bool = false
    var exists:Bool {
        get{
            return self._exists
        }
    }
    

    并直接访问self._exists,因为没有设置器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多