gpt4 book ai didi

swift - 类型 *My Custom Class* 没有下标成员

转载 作者:行者123 更新时间:2023-11-30 13:48:06 25 4
gpt4 key购买 nike

这是一个我正要发布我的完整答案的问题,但似乎作者在那一刻删除了该问题,可能是因为唯一的回复是一条评论说这是不可能的。我自己发现这个问题的技术方面有点有趣,所以我在这里添加相同的问题和答案,以防其他人对此感兴趣。

请随意编辑此帖子/主题及其答案。另外,我在元中查找了有关以这种方式重新发布已删除问题的指南,但是没有找到任何明确的非建议。如果我错了,请告诉我。

<小时/>

(SO 用户的原始问题 Jaime )

类型我的自定义类没有下标成员

我正在尝试编写一些 javascript 式的代码,但它崩溃了。

class Product {

var name : String!
var type: String!
var description: String!
var taste: String!
var picturePath: String!
var pairings: [String]
var similar: [String]

init(dict: Dictionary<String, AnyObject>) {
let props = ["name", "type", "description", "taste", "pairings", "similar"]
for prop in props {
self[prop] = dict[prop]
}
}
}

有没有办法做我在这里想做的事情,或者我是否必须手动初始化类的所有属性,例如

if let title = dict["name"] as? String {
self.title = title
}
//... and so on

最佳答案

首先:正如 Alex 在对原始问题的评论中所写,通常应该避免这种情况。

It feels to weird to answer a question with "no"; even if it is possible, it would either not be type-safe, or it would require so much boilerplate that you'd be better off just writing the initializer by hand. Swift is very often not conducive to writing Javascript-esque code, since it's staticly, strongly typed.

<小时/>

无论如何,你可以借助Mirror(反射(reflection) self )和一些整洁的 obj-c 来做到这一点;让你的类继承 NSObject

class Product : NSObject {

var varDump: AnyObject?
var name : String?
var type: String?
// ...

init(dict: Dictionary<String, AnyObject>) {
super.init()

let a = Mirror(reflecting: self).children.filter { $0.label != nil }
for b in a {
self.setValue(dict[(b.label ?? "")], forKey: (b.label ?? "varDump"))
}
}

}

var propertyInit = [String:AnyObject]()
propertyInit["name"] = "John"
propertyInit["type"] = "Human"

var a = Product(dict: propertyInit)

print(a.name ?? "Not initalized") // John
print(a.type ?? "Not initalized") // Human

除了 NSObject 继承之外,您还会看到您希望以此方式初始化的所有属性都已在上面设置为可选。这自然是因为 swift 直到运行时才能知道您是否真正初始化了这些属性,因此如果您将它们标记为非可选,则会产生编译时错误。

最后,再次注意亚历克斯在他的评论中写的内容(引用),并将这个答案作为一种某事的技巧,但如果您想遵循常见的做法,那么实际上并不是推荐的做法 swift 约定。如果您在字典初始化时不太小心,那么这段代码很容易在运行时中断,因为您完全失去了类型安全性。

关于swift - 类型 *My Custom Class* 没有下标成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667955/

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