我试图class使用泛型动态创建基于实例的类型,但是我遇到了类内省的困难.
以下是问题:
self.class?AnyClass结果实例化一个类NSClassFromString?AnyClass从通用参数中获取或以其他方式严格输入信息T?(类似于C#的typeof(T)语法)在Swift中是否有一种简单的方法来迭代类的属性.
即我有一个类Person,它有3个属性:name,lastname,age.
是否有类似的东西
for attribute in Person {
println("\(attribute): \(attribute.value)")
}
Run Code Online (Sandbox Code Playgroud)
输出将是例如:
name: Bob
lastname: Max
age: 20
Run Code Online (Sandbox Code Playgroud) 有没有办法在Swift中列出类的所有变量?
例如:
class foo {
var a:Int? = 1
var b:String? = "John"
}
Run Code Online (Sandbox Code Playgroud)
我想这样列出: [a:1, b:"John"]
我正在尝试创建一个将更改对象属性的序列化程序.
例:
class testobj{
var prop1:Int = 3
var prop2:String = "Hello"
var prop3:Dictionary<String,String> = Dictionary<String,String>()
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用访问属性的名称和类型
reflect(testobjc())[0].1
Run Code Online (Sandbox Code Playgroud)
和
var tester = testobj()
_std_lib_DemangledTypeName(tester.prop1)
Run Code Online (Sandbox Code Playgroud)
但我想做的事情是这样的
var tester = testobj()
for(var x:Int = 0; x < reflect(testobj()).count; x++){
if(_std_lib_DemangledTypeName(tester.(reflect(testobj())[0].1)) == "Swift.String"){
tester.(reflect(testobj())[0].1) = "World!"
}
}
Run Code Online (Sandbox Code Playgroud)
本质上,我想遍历为给定类列出的所有属性,并在该类的新创建的对象上设置属性.任何指导将不胜感激.快速反射对我来说是新的.
最近我使用协议func setValue(_ value: AnyObject?, forKey key: String)的功能通过以下方式NSKeyValueCoding更改 a 的文本颜色:UIPickerDate
class ColoredDatePicker: UIDatePicker {
var changed = false
override func addSubview(view: UIView) {
if !changed {
changed = true
self.setValue(UIColor(red: 0.42, green: 0.42, blue: 0.42, alpha: 1), forKey: "textColor")
}
super.addSubview(view)
}
}
Run Code Online (Sandbox Code Playgroud)
关于这个问题的答案。它工作完美。
但我在这里的回答是:
我如何知道该类提供的名称(如textColor上面使用的)是什么?
我试图在文档中找到任何获取所有名称的内容,但到目前为止,我还没有找到任何内容来获取类提供的密钥,如上述情况。
我想知道是否有办法获得一些有用的班级构成信息。例如,我发现能够访问类的所有可用函数非常有用。看来这MyrrorType不是我正在寻找的:/我知道我可以使用获取函数名称__FUNCTION__,但这并不完全是我所需要的。我需要的是可用于班级的所有功能的完整列表。有什么有用的提示吗?
我试图从继承自类的对象中打印所有值,这是我的示例:
我创建类:
class Pokemon {
var name: String?
var type: String?
var level: Int?
var exp = 0.0
}
Run Code Online (Sandbox Code Playgroud)
创建对象并分配一些值:
var pikachu = Pokemon()
pikachu.name = "Pika Pika"
pikachu.level = 1
pikachu.type = "electricity"
pikachu.exp = 0
Run Code Online (Sandbox Code Playgroud)
现在,我想遍历所有皮卡丘对象属性并打印值。我在为每个循环考虑,但我不确定如何实现它。
我知道我可以做这样的事情:
func printStats(pokemon: Pokemon) {
if pokemon.name != nil {
print(" name: \(pokemon.name!)\n level:\(pokemon.level!)\n type:\(pokemon.type!)\n exp: \(pokemon.exp!)")
}
}
printStats(pokemon: pikachu)
Run Code Online (Sandbox Code Playgroud)
输出:
name: Pika Pika
level:1
type:electricity
exp: 0.0
Run Code Online (Sandbox Code Playgroud)
但是我只想遍历所有值,而不是显式地编写函数中的每个属性。