我正在寻找一种通用的解决方案:
@protocol
属性readonly
醇>
类似至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 { }
}
答案 0 :(得分:5)
直接来自documentation:
使用@objc(&lt;#name#&gt;)属性在必要时为属性和方法提供Objective-C名称。例如,您可以将名为enabled的属性标记为在Objective-C中具有名为isEnabled的getter,如下所示:
SWIFT
var enabled: Bool { @objc(isEnabled) get { /* ... */ } }
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
,因为没有setter。