transformedValueClass返回AnyObject类型的Array

时间:2015-06-26 07:59:33

标签: ios swift cocoa-touch core-data nsvaluetransformer

我正在尝试实现名为NSValueTransformer的{​​{1}}类,该类旨在转换一个可以包含任何类型对象的数组,如下所示:

ArrayValueTransformer

但是return语句给出了这个错误:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

AnyClass AnyObject .Type的 typealias 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。 transformdValue reverseTransformedValue 的返回类型为AnyObject?,因此您需要将其类型转换为您的类型。