如何为密钥创建值

时间:2016-03-30 20:25:40

标签: swift sprite-kit setvalue

我试图让我的SKNode有一个值,我可以访问以获取值。它就像name属性(skspritenode.name),但我希望能够将booleans作为值。

这就是我尝试创建此值的方式。

if block.valueForKey("is_Block") == true {
   //run code here
}

然后,当我尝试访问它时,我使用此

<form action="index.php" method="post">
echo "<select>";
foreach($numbers->available_phone_numbers as $number) {

echo "<option value='".$number->phone_number."'>";
echo $number->phone_number;
$counter++;
echo "</option>";
echo "<br>";
}
echo "</select>";
echo "<br>";
echo $counter;
?>Area Code:<br>
<input type="text" name="areacode" value=""><br>
<input type="submit" value="Submit">
</form>

我很难过。有什么建议? 如果这有点令人困惑,我道歉。我不擅长解释简单的事情。

1 个答案:

答案 0 :(得分:1)

问题是SKNode上不存在is_Block。

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)")