[英]Array from AnyClass or dynamicType, Swift
有没有一种方法可以在Swift 2.1中实现
class Apple
{
}
class Fruit
{
let apples = [Apple]();
}
let fruit = Fruit();
let appleType: AnyClass = Apple.self;
let applesType: Any = fruit.apples.self.dynamicType;
let properties = Mirror(reflecting: fruit).children;
for property in properties
{
let magicalApples = property.value;
let array = Array<appleType>(); // creating array of Apple from type
let apples = magicalApples as! Array<appleType> // typecasting to array of Apple from type
let moreApples = magicalApples as! applesType // typecasting to [Apple] from type
let anyApples = magicalApples as! Array<AnyObject> // error SIGABRT, is this a bug?
}
已注释的目标将引发错误“使用未声明的类型”。
我的目标是知道appleType
(存储在var
中的Type
可以用作Type
不,您不能分配新的类型,因为这是一个让。
Cannot assign to immutable expression of type 'ClassName.Type'
-更新-
let anyApples = magicalApples as! Array<AnyObject>
let anyApples = magicalApples as! Array<AnyObject>
应该是
let anyApples = magicalApples as! Array<Any>
let anyApples = magicalApples as! Array<Any>
吗?
-更新2-
看参考
这可以将apples
附加到magicalApples
。
// Edit: NSObject added
class baseApple: NSObject
{
required override init()
{
}
}
class Apple: baseApple
{
}
// Edit: NSObject added
class Fruit: NSObject
{
var apples: [Apple] = [Apple]();
}
let fruit = Fruit();
let appleType: baseApple.Type = Apple.self;
let properties = Mirror(reflecting: fruit).children;
for property in properties
{
let magicalApples = property.value
var apples = magicalApples as! NSArray as Array<AnyObject> // first typecast to NSArray
apples.append(appleType.init()) // apples are now edible
// Edit
fruit.setValue(apples, forKey: "apples"); // apples supplied, of course I am assuming fruit object will be obtained dynamically.
}
fruit.apples.count; // output: 1
以上适用于这种情况。 虽然,答案是“ Swift 2.1无法实现”
这解释了它,为链接的感谢@DevAndArtist。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.