繁体   English   中英

来自AnyClass或dynamicType的数组,Swift

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM