2015-06-26 4 views
0

Я пытаюсь реализовать NSValueTransformer класс с именем ArrayValueTransformer, который предназначен для преобразования массива, который может содержать любой тип объекта в нем следующим образом:transformedValueClass вернуть массив типа AnyObject

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

Но возвращение заявление дает эту ошибку:

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

ответ

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

AnyClass является т ypealias для AnyObject. Тип. AnyObject представляет только ссылочные типы в Swift, такие как классы. Где как Array в 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. transformdValue и reverseTransformedValue имеет тип возвращаемого объекта AnyObject ?, поэтому вам нужно было бы придать тип вашему типу любым способом.

 Смежные вопросы

  • Нет связанных вопросов^_^