2015-06-26 56 views
0

我試圖實現NSValueTransformer名爲ArrayValueTransformer這是指類如下改造它可以包含在任何類型的對象的數組:transformedValueClass返回類型AnyObject的陣列

class ArrayValueTransformer : NSValueTransformer { 
    override class func transformedValueClass() -> AnyClass { 
     return Array<AnyObject>.self 
    } 
} 

但return語句給出了這樣的錯誤:

Type 'Array<AnyObject>' does not conform to protocol 'AnyObject' 

回答

0
override class func transformedValueClass() -> AnyClass { 
    return NSArray.self 
} 
0

AnyClass噸yopealias for AnyObject .Type。 AnyObject只代表Swift中的引用類型,例如類。 Swift中的數組是不能用代表的值類型AnyObject而應該使用任何。您可以使用NSArray這是Objective C中的類類型,它很好地橋接Swift Array。

class ArrayValueTransformer : NSValueTransformer { 

    override func transformedValue(value: AnyObject?) -> AnyObject? { 
     guard let randomString = value as? String else { return nil } 
     return split(randomString.characters, isSeparator: {$0 == " "}).map{ String($0) } 
    } 

    override func reverseTransformedValue(value: AnyObject?) -> AnyObject? { 
     guard let randomArray = value as? [String] else { return nil } 
     return randomArray.reduce(" ", combine: { "\($0!) \($1)" }) 
    } 

    override class func transformedValueClass() -> AnyClass { 
     return NSArray.self 
    } 
} 

let transformer = ArrayValueTransformer() 
let transformedValue = transformer.transformedValue("J A C K")! 

let originalValue = transformer.reverseTransformedValue(transformedValue) 

順便說一句,您可以使用AnyObject.self。 transformdValuereverseTransformedValue具有AnyObject?的返回類型,因此您需要將它類型化爲任何方式。