简体   繁体   English

transformedValueClass返回类型为AnyObject的数组

[英]transformedValueClass to return Array of type AnyObject

I'm trying to implement NSValueTransformer class named ArrayValueTransformer which is meant to transform an Array which can contain any type of object in it as follows: 我正在尝试实现名为ArrayValueTransformer NSValueTransformer类,该类旨在转换一个可以在其中包含任何类型的对象的Array,如下所示:

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

But the return statement gives this error: 但是return语句给出此错误:

Type 'Array<AnyObject>' does not conform to protocol 'AnyObject'
 override class func transformedValueClass() -> AnyClass {
    return NSArray.self
}

AnyClass is a typealias for AnyObject .Type. AnyClassAnyObject .Type的类型 别名 AnyObject only represents the reference types in Swift such as classes. AnyObject仅表示Swift中的引用类型,例如类。 Where as Array in Swift are value type which cannot be represented by AnyObject rather you should use Any . Swift中的Array是不能用AnyObject表示的值类型,而应该使用Any You could use NSArray which is a class type in Objective C which is bridged nicely to Swift Array. 您可以使用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)

By the way, you can use AnyObject.self. 顺便说一句,您可以使用AnyObject.self。 The transformdValue and reverseTransformedValue has the return type of AnyObject?, So you would need to typecast it to your type any how. transformdValuereverseTransformedValue的返回类型为AnyObject ?,因此您需要以任何方式将其类型转换为您的类型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM