如何在Swift中将元组转换为AnyObject

时间:2015-01-25 17:31:52

标签: swift tuples

以下代码编译错误: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
}

如何将元组转换/转换为AnyObject?

3 个答案:

答案 0 :(得分:10)

这只是一种解决方法。

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

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
    }
}

希望这有帮助。

答案 1 :(得分:9)

  

如何将元组转换/转换为AnyObject?

简单地说,你不能。只能将类类型(或桥接到Foundation类类型的类型)强制转换为AnyObject。元组不是类类型。

当然,可能还有很多其他方法可以实现 尝试完成的任何事情。但至于你的特定的问题,你不能这样做。

答案 2 :(得分:1)

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

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

        return b  // No error
    }
}

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

}