A O*_*A O 7 objective-c key-value-coding kvc swift
我的团队已决定新文件应该用swift编写,我发现在Objective-C对象中使用KVC在Swift对象上设置属性有一个奇怪的问题.
我的Objective-C设置了这样的属性: [textObject setValue:0.0 forKey:@"fontSize"]
我的Swift对象(textObject)具有此属性的自定义setter/getter.
var fontSize: CGFloat? {
get {
return internalTextGraphic?.fontSize
}
set {
internalTextGraphic?.fontSize = newValue
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我在其中设置断点set,它永远不会被击中.
我有Objective-C对象也得到同样的调用,我只是实现
-setFontSize,并执行正确.
为什么我似乎无法进入我的set方法-setValueForKey?我有100%确认textObject存在并且是正确的类型.
编辑:
马丁R是正确的,我不得不使类型不可选.这是我的工作代码:
var fontSize: CGFloat {
get {
var retFontSize: CGFloat = 0.0
if let fontSize = internalTextGraphic?.fontSize {
retFontSize = fontSize
}
return retFontSize
}
set {
if let textGraphic = internalTextGraphic {
textGraphic.fontSize = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
原因是Swift可选结构或枚举(在您的情况下CGFloat?)在Objective-C中不可表示(并且您将不会在生成的"Project-Swift.h"头文件中看到该属性).如果您明确标记属性@objc,那么这将变得更加明显,然后您将收到错误消息
error: property cannot be marked @objc because its type cannot be represented in Objective-C
如果将属性类型更改为非可选属性,CGFloat
则KVC将按预期工作.它也适用于可选的类类型,例如NSNumber?.
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |