0

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

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

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

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

2 回答 2

1

AnyClassAnyObject .Type的类型别名。AnyObject仅表示 Swift 中的引用类型,例如类。Swift中的Array是值类型,不能由AnyObject表示,而您应该使用Any。您可以使用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?,因此您需要以任何方式将其类型转换为您的类型。

于 2015-06-26T08:56:13.813 回答
0
 override class func transformedValueClass() -> AnyClass {
    return NSArray.self
}
于 2015-06-26T08:45:17.960 回答