如何为键创建值
How to Create a Value for key
我正在尝试让我的 SKNode 有一个键值,我可以访问它以从中获取值。它就像名称 属性 (skspritenode.name) 但我希望能够将布尔值作为值。
这就是我试图创造这个价值的方式。
block.setValue(false, forUndefinedKey: "is-Block")
然后当我尝试访问它时,我使用这个
if block.valueForKey("is_Block") == true {
//run code here
}
我被难住了。有什么建议么?
如果这有点令人困惑,我深表歉意。我不擅长解释简单的事情。
问题是 is_Block 在 SKNode 上不存在。
setValue forUndefinedKey
默认会引发 NSUndefinedKeyException。
如果你有一个子类,你会覆盖这个函数来做你想做的事。
请参阅 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html 以更好地理解键值编码。
如果你想让 SKNode 有一个名为 is_Block 的自定义变量,你将不得不为 SKNode 创建一个扩展,并创建一个 属性 来为你存储这些数据。
import Foundation
import SpriteKit
import ObjectiveC
extension SKNode{
var isBlock: Bool {
get {
var key = "isBlock";
guard let block = objc_getAssociatedObject(self, &key) as? Bool
else{
print("Error");
return false
}
print("Success");
return block
}
set(newValue) {
var key = "isBlock";
print("Setting \(newValue)")
objc_setAssociatedObject(self, &key, newValue , objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
操场测试:
import Foundation
import SpriteKit
import ObjectiveC
extension SKNode{
var isBlock: Bool {
get {
var key = "isBlock";
guard let block = objc_getAssociatedObject(self, &key) as? Bool
else{
print("Error");
return false
}
print("Success");
return block
}
set(newValue) {
var key = "isBlock";
print("Setting \(newValue)")
objc_setAssociatedObject(self, &key, newValue , objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
let a = SKNode()
let b = SKNode()
a.isBlock = false
b.isBlock = true
print ("\(a.isBlock), \(b.isBlock)")
b.isBlock = false
a.isBlock = true
print ("\(b.isBlock), \(a.isBlock)")
我正在尝试让我的 SKNode 有一个键值,我可以访问它以从中获取值。它就像名称 属性 (skspritenode.name) 但我希望能够将布尔值作为值。
这就是我试图创造这个价值的方式。
block.setValue(false, forUndefinedKey: "is-Block")
然后当我尝试访问它时,我使用这个
if block.valueForKey("is_Block") == true {
//run code here
}
我被难住了。有什么建议么? 如果这有点令人困惑,我深表歉意。我不擅长解释简单的事情。
问题是 is_Block 在 SKNode 上不存在。
setValue forUndefinedKey
默认会引发 NSUndefinedKeyException。
如果你有一个子类,你会覆盖这个函数来做你想做的事。
请参阅 https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueCoding/Articles/BasicPrinciples.html 以更好地理解键值编码。
如果你想让 SKNode 有一个名为 is_Block 的自定义变量,你将不得不为 SKNode 创建一个扩展,并创建一个 属性 来为你存储这些数据。
import Foundation
import SpriteKit
import ObjectiveC
extension SKNode{
var isBlock: Bool {
get {
var key = "isBlock";
guard let block = objc_getAssociatedObject(self, &key) as? Bool
else{
print("Error");
return false
}
print("Success");
return block
}
set(newValue) {
var key = "isBlock";
print("Setting \(newValue)")
objc_setAssociatedObject(self, &key, newValue , objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
操场测试:
import Foundation
import SpriteKit
import ObjectiveC
extension SKNode{
var isBlock: Bool {
get {
var key = "isBlock";
guard let block = objc_getAssociatedObject(self, &key) as? Bool
else{
print("Error");
return false
}
print("Success");
return block
}
set(newValue) {
var key = "isBlock";
print("Setting \(newValue)")
objc_setAssociatedObject(self, &key, newValue , objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN)
}
}
}
let a = SKNode()
let b = SKNode()
a.isBlock = false
b.isBlock = true
print ("\(a.isBlock), \(b.isBlock)")
b.isBlock = false
a.isBlock = true
print ("\(b.isBlock), \(a.isBlock)")