如何在 Swift 中将 Tuple 转换为 AnyObject

How to convert Tuple to AnyObject in Swift

以下代码编译错误:Error:(112, 20) type '(String, Int)' does not conform to protocol 'AnyObject'

func myMethode() {
    aMethodeThatICanNotChange {
        let a  = ("John",7)
        return a  // Error:(112, 20) type '(String, Int)' does not conform to protocol 'AnyObject'
    }
}

func aMethodeThatICanNotChange(closure: () -> AnyObject) {
     // do something with closure
}

如何 cast/convert 元组到 AnyObject?

元组是有序的元素列表,因此您可以将其转换为符合 AnyObject 协议的 Array

func myMethode() {
    aMethodeThatICanNotChange {
        // let a  = ("John",7)
        let b = ["Joth", 7]

        return b  // No error
    }
}

func aMethodeThatICanNotChange(closure: () -> AnyObject) {
    // do something with closure

}

How can I cast/convert a Tuple to AnyObject?

简单地说,你不能。只有 class 类型(或桥接到 Foundation class 类型的类型)可以转换为 AnyObject。元组不是 class 类型。

当然,可能还有许多其他方法可以完成您真正想要完成的任何事情。但是至于你特别的问题,你做不到。

这只是一种解决方法。

您可以创建一个 class 来包装您的元组。

class TupleWrapper {
    let tuple : (String, Int)
    init(tuple : (String, Int)) {
        self.tuple = tuple
    }
}

那你可以这么写:

func myMethod() {
    aMethodeThatICanNotChange {
        let a  = ("John",7)
        let myTupleWrapper = TupleWrapper(tuple: a)
        return myTupleWrapper
    }
}

或者,您可以创建一个可以接收任何 Type.

值的通用包装器
class GenericWrapper<T> {
    let element : T
    init(element : T) {
        self.element = element
    }
}

希望对您有所帮助。