gpt4 book ai didi

objective-c - 在 Swift 中命名 Obj-C 属性 getter 和 setter

转载 作者:搜寻专家 更新时间:2023-10-31 08:26:23 24 4
gpt4 key购买 nike

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

  1. Obj-C 来自 Swift 的命名属性 getter 和命名属性 setter
  2. 符合具有 readonly 属性的 Objective-C @protocol

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


Objective-C 到 Swift 属性示例:

我有一个 Objective-C 协议(protocol),它定义了两个有问题的属性,一个带有自定义 getter isEnabled,另一个带有私有(private) 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 { }
}

最佳答案


直接来自 documentation :

Use the @objc(<#name#>) attribute to provide Objective-C names for properties and methods when necessary. For example, you can mark a property called enabled to have a getter named isEnabled in Objective-C like this:

SWIFT

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 因为没有 setter。

关于objective-c - 在 Swift 中命名 Obj-C 属性 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32456424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com