簡體   English   中英

transformedValueClass返回類型為AnyObject的數組

[英]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
}

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 ?,因此您需要以任何方式將其類型轉換為您的類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM