数组 – Swift Generic Array’不相同’错误
发布时间:2020-12-14 04:49:55 所属栏目:百科 来源:网络整理
导读:我刚刚经历了一些从Beta3开始显然已经过时的 Swift tuts …… func exchangeT(data:[T],i:Int,j:Int){ let temp = data[i]; data[i] = data[j]; data[j] = temp;} 游乐场告诉我: 错误:@lvalue $T8与T不同. 如何更改它以使其工作? 解决方法 Swift中的数组
我刚刚经历了一些从Beta3开始显然已经过时的
Swift tuts ……
func exchange<T>(data:[T],i:Int,j:Int) { let temp = data[i]; data[i] = data[j]; data[j] = temp; } 游乐场告诉我: 错误:@lvalue $T8与T不同. 如何更改它以使其工作? 解决方法
Swift中的数组是值类型.这意味着数据在传递到您的交换方法时会被复制,但您尝试修改副本以影响原始版本.相反,你应该做两件事之一:
1.将数据定义为inout参数: func exchange<T>(inout data:[T],j:Int) 然后在调用它时你必须添加一个&通话前: var myArray = ["first","second"] exchange(&myArray,1) 2.返回数组的副本(推荐) func exchange<T>(data:[T],j:Int) -> [T] { var newData = data newData[i] = data[j] newData[j] = data[i] return newData } 我推荐使用这种方法而不是in-out参数,因为in-out参数会创建更复杂的状态.你有两个变量指向并可能操纵同一块内存.如果交换决定在一个单独的线程上完成它的工作怎么办?还有一个原因是Apple决定使用in-out subverts来制作数组值类型.最后,返回副本更接近Functional Programming,这是Swift可以移动的有前途的方向.我们的应用程序中的状态越少,我们将创建的错误越少(通常). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |