相关疑难解决方法(0)

Swift类内省和泛型

我试图class使用泛型动态创建基于实例的类型,但是我遇到了类内省的困难.

以下是问题:

  • 是否有一个与Obj-C相当的Swift self.class
  • 有没有办法使用AnyClass结果实例化一个类NSClassFromString
  • 有没有办法AnyClass从通用参数中获取或以其他方式严格输入信息T?(类似于C#的typeof(T)语法)

introspection swift

118
推荐指数
5
解决办法
6万
查看次数

迭代Swift中的对象类属性

在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

31
推荐指数
3
解决办法
2万
查看次数

如何在swift中列出类的所有变量

有没有办法在Swift中列出类的所有变量?

例如:

class foo {
   var a:Int? = 1
   var b:String? = "John"
}
Run Code Online (Sandbox Code Playgroud)

我想这样列出: [a:1, b:"John"]

variables class swift

11
推荐指数
2
解决办法
8823
查看次数

使用反射在Swift中更改属性

我正在尝试创建一个将更改对象属性的序列化程序.

例:

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)

本质上,我想遍历为给定类列出的所有属性,并在该类的新创建的对象上设置属性.任何指导将不胜感激.快速反射对我来说是新的.

reflection swift

6
推荐指数
1
解决办法
1497
查看次数

获取班级的所有钥匙

最近我使用协议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上面使用的)是什么?

我试图在文档中找到任何获取所有名称的内容,但到目前为止,我还没有找到任何内容来获取类提供的密钥,如上述情况。

key-value-coding ios swift

6
推荐指数
1
解决办法
1233
查看次数

Swift 的反射 - 获取类的函数名称

我想知道是否有办法获得一些有用的班级构成信息。例如,我发现能够访问类的所有可用函数非常有用。看来这MyrrorType不是我正在寻找的:/我知道我可以使用获取函数名称__FUNCTION__,但这并不完全是我所需要的。我需要的是可用于班级的所有功能的完整列表。有什么有用的提示吗?

swift

4
推荐指数
1
解决办法
4126
查看次数

列出所有类属性swift 3

我试图从继承自类的对象中打印所有值,这是我的示例:

我创建类:

 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)

但是我只想遍历所有值,而不是显式地编写函数中的每个属性。

foreach attributes class swift3

0
推荐指数
1
解决办法
1578
查看次数