ios – 如何从变量访问属性或方法?

前端之家收集整理的这篇文章主要介绍了ios – 如何从变量访问属性或方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以使用变量作为 Swift方法属性名称来访问方法属性

PHP中,您可以使用$object-> {$variable}.例如

class Object {
  public $first_name;
}

$object = new Object();
$object->first_name = 'John Doe';

$variable = 'first_name';
$first_name = $object->{$variable}; // Here we can encapsulate the variable in {} to get the value first_name
print($first_name);
// Outputs "John Doe"

编辑:

这是我正在使用的实际代码

class Punchlist {
    var nid: String?
    var title: String?

    init(nid: String) {

        let (result,err) = SD.executeQuery("SELECT * FROM punchlists WHERE nid = \(nid)")
        if err != nil {
            println("Error")
        }
        else {
            let keys = self.getKeys()  // Get a list of all the class properties (in this case only returns array containing "nid" and "title")
            for row in result {  // Loop through each row of the query
                for field in keys {  // Loop through each property ("nid" and "title")
                    // field = "nid" or "title"
                    if let value: String = row[field]?.asString() {
                        // value = value pulled from column "nid" or "title" for this row
                        self.field = value  //<---!! Error: 'Punchlist' does not have a member named 'field'
                    }
                }
            }
        }
    }

    //  Returns array of all class properties
    func getKeys() -> Array<String> {
        let mirror = reflect(self)
        var keys = [String]()
        for i in 0..<mirror.count {
            let (name,_) = mirror[i]
            keys.append(name)
        }

        return keys
    }
}

解决方法

你可以做到,但不能使用“纯粹的”Swift. Swift(作为一种语言)的重点是防止这种危险的动态属性访问.你必须使用Cocoa的 Key-Value Coding功能
self.setValue(value,forKey:field)

非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

(但如果可能的话,最好将您的架构重新实现为字典.字典具有任意字符串键和相应的值,因此没有桥可以交叉.)

原文链接:https://www.f2er.com/iOS/332210.html

猜你在找的iOS相关文章