我在苹果官网上阅读了Swift文档。 其中有一个名为swapTwoValues的函数,可以交换任意给定的两个值。
func swapTwoValues1<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
现在我想编写类似的功能,但是不使用T泛型类型,而是使用Any。
func swapTwoValues2(_ a: inout Any, _ b: inout Any) {
let temporaryA = a
a = b
b = temporaryA
}
要调用这些函数,我需要编写以下代码。
var a = 5
var b = 9
swapTwoValues1(&a, &b)
swapTwoValues2(&a, &b)
我有两个问题。
1) 为什么编译器会在第二个函数中给出这个错误(无法将不可变值作为inout参数传递:从'Int'到'Any'的隐式转换需要一个临时值)
2) 通用类型和Any之间有什么区别
Any
。编译器无法在编译时知道实际包含在a
和b
中的具体类型是什么。String
和一个Int
,会发生什么?您如何想象在这种情况下进行交换? - luk2302Int
,但想将它作为Any
指针传递给方法,这会丢失类型信息 - 你想要传递指针 / inout 的唯一原因是你想要从函数内部设置其值。而出于已经给出的原因,这是不可能的。 - luk2302