gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 05:48:00 26 4
gpt4 key购买 nike

是否可以在 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)

非常方便,它正好跨越了您想要跨越的字符串到属性名称的桥梁,但要小心:这里有龙。

(但如果可能的话,将您的体系结构重新实现为字典会更好。字典具有任意字符串键和相应的值,因此没有可以跨越的桥梁。)

关于ios - 如何从变量访问属性或方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27454625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com