Swift Generic Array 'not identical' error

Arrays in Swift are value types. That means that data is copied when passed into your exchangemethod, but you are trying to modify the copy to affect the original version. Instead you should do one of two things:

1. Define data as an inout parameter:

func exchange<T>(inout data:[T], i:Int, j:Int)

Then when calling it you have to add an & before the call:

var myArray = ["first", "second"]
exchange(&myArray, 0, 1)

2. Return a copy of the Array (recommended)

func exchange<T>(data:[T], i:Int, j:Int) -> [T]
{
    var newData = data
    newData[i] = data[j]
    newData[j] = data[i]
    return newData
}

I recommend this way over the in-out parameter because in-out parameters create more complicated state. You have two variables pointing to and potentially manipulating the same piece of memory. What if exchange decided to do its work on a separate thread? There is also a reason that Apple decided to make arrays value types, using in-out subverts that. Finally, returning a copy is much closer toFunctional Programming which is a promising direction that Swift can move. The less state we have in our apps, the fewer bugs we will create (in general).

http://stackoverflow.com/questions/24784252/swift-generic-array-not-identical-error

Swift Generic Array 'not identical' error

时间: 2024-08-07 01:37:53

Swift Generic Array 'not identical' error的相关文章

由Cannot create a generic array of ArrayList&lt;xx&gt;引出的学习--Java范型

最近在用Java写某个程序时希望写出一个包括ArrayList<xx>的数组 自己定义如下: ArrayList<edge>[] edges = new ArrayList<edge>()[10]; 然后编译器报错如下: Cannot create a generic array of ArrayList<edge>; 在C++里可以这样比较方便的定义:  vector<edge> a[100]; 在Java里报错,查询了一下,见已经有人在sta

Swift中Array的删除对象

Swift中Array的删除对象 在Swift中数组Array没有removeObject的方法 1.找到下标 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #000000; background-color: #ffffff } span.s1 { color: #aa0d91 } span.s2 { color: #5c2699 } span.s3 { color: #1c00cf } let model

Swift Tips - Array 类型

在开发中,数组这个概念我们应该很熟悉了,Objective-C 中为我们提供了 NSArray 作为数组的实现.大家应该对很熟悉了.而在 Swift 中,为我们提供了它自己对于数组的实现,也是这里我们要介绍的,就是 Array 类. Array 的官方文档可以参看这里: SwiftStandardLibraryReference 废话不多说,下面就开始我们的主题啦. <!-- more --> 创建数组 我们要使用一个数组,首先要做的就是创建它,Array 类为我们提供了几种方式来创建: va

学习Swift -- 数组(Array) - 持续更新

集合类型--数组 Array是Swift中的一种集合类型:数组,数组是使用有序列表储存同一类型的多个值,与OC的NSArray的最大不同是,Swift的数组是值类型,OC的数组是引用类型 声明数组的方法 // 如果声明可变数组 就设置为变量 var someMutableArray = [Int]() // 声明了空数组 类型为Int // 相反声明不可变数组就设置为常量 let someArray = Array(count: 5, repeatedValue: 0.03) // 声明了一个不

swift中array的相关操作

1,数组基本操作  //插入元素,替换插入后第一个元素 var aa = [1,2,3,4] aa[1...1] = [6,7,8] println("\(aa)") //插入元素,不替换插入后第一个元素 aa = [1,2,3,4] aa[3..3] = [6,7,8] println("\(aa)") //插入元素,替换插入后第一个元素,在最后一个元素后插入不可用...运算 var bb = [1,2,3,4] bb[4..4] = [6,7,8] printl

Swift开发Array详细使用

// //  ViewController.swift //  Swift+Array import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.yellow; //数组初始化 var numbers = [1,2,3,4,5,6]; print(numbers) var vo

Swift - use Array

//数组声明 var arr0 = Array<Int>() var arr1 = Array<String>(count: 3, repeatedValue: "") var strs = ["Hello"] print(strs.count) //个数 strs.append("Hi") //添加 print(strs.isEmpty) //判空 strs.appendContentsOf(["How&quo

Swift 02.Array

数组可以存放任意类型,初始化时候的类型 决定了数组后面可以添加什么类型的元素 let 不可变数组 let arrayC = [1,2,3,4,5,6,7] var 可变数组 var arrayM = [1,2,3,4,5,6,7] 数组元素个数 print(arrayC.count) 通过下标访问数组元素 print(arrayC[0]) 通过下标修改对应元素的值 arrayM[0] = 10 通过 + 可以直接在数组的末尾添加元素 arrayM += arrayC 直接向数组的末尾添加元素 a

iOS: 将OC的NSMutableArray转为Swift的Array

一句话: YourSwiftObject convertedArray = your_MutableArray as NSArray as [YourSwiftObject]