【发布时间】:2015-11-19 01:27:04
【问题描述】:
可以通过将此代码放置在操场上来观察行为:
import Foundation
import ObjectiveC
class TestClass {}
var obj = TestClass()
let stringValue = "xyz"
let key = "def"
objc_setAssociatedObject(obj, key, stringValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
//let f = "f"
let returnedString = objc_getAssociatedObject(obj, key)
这有效并从objc_getAssociatedObject 调用返回“xyz”。
但是,如果您从 let f = "f" 行中删除评论。 objc_getAssociatedObject 调用现在返回 nil。
我对设置一个完全不相关的变量如何影响调用感到困惑。
有什么想法吗?
【问题讨论】:
-
你运行的是哪个 Xcode 版本?
-
我可以在 7.1.1 的操场上重现这一点,但不能在实际应用程序中重现。也许是游乐场的错误。
-
我正在考虑这个问题。此外,如果您将定义放在键和运行时调用之间,它会中断。如果将 let f = "f" 向上移动,它就可以正常工作。
-
我发布的代码是对我在单元测试中的代码的缩减。在测试中,我正在测试一些添加关联属性的代码。所以我想获取我存储的值来检查它是否正确。但是,即使我修改了我正在测试的代码以返回用于存储值的密钥,我也一直得到 nils。我知道这个值被存储了,因为其他代码后来很高兴地使用了这个值。所以我剪切粘贴到一个操场上,看看发生了什么,最后得到了上面的代码。
标签: objective-c swift swift-playground