[英]error : cannot convert [anyobject] to type array<_> in coercion
[英]transformedValueClass to return Array of type AnyObject
我正在尝试实现名为ArrayValueTransformer
NSValueTransformer
类,该类旨在转换一个可以在其中包含任何类型的对象的Array,如下所示:
class ArrayValueTransformer : NSValueTransformer {
override class func transformedValueClass() -> AnyClass {
return Array<AnyObject>.self
}
}
但是return语句给出此错误:
Type 'Array<AnyObject>' does not conform to protocol 'AnyObject'
override class func transformedValueClass() -> AnyClass {
return NSArray.self
}
AnyClass是AnyObject .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。 transformdValue和reverseTransformedValue的返回类型为AnyObject ?,因此您需要以任何方式将其类型转换为您的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.