我目前正在学习用于iOS开发的Swift 3,我想知道以下方法之间的区别:
if let myItemArray = itemObject as? NSArray
{
myItemArray.addingObjects(from: [itemTextField.text!])
}
和以下方法:
if let myItemArray = itemObject as? NSArray
{
myItemArray.append(itemTextField.text!)
}
答案 0 :(得分:3)
这里有两件事要理解。
首先,Swift数组桥接到Objective-C NSArray。因此,许多Cocoa Foundation NSArray方法只是神奇地栩栩如生,就好像它们属于Array一样,如果它们不属于,你可以通过将一个Swift数组转换为NSArray来实现它们。例如:
let arr = ["Manny", "Moe", "Jack"] // Swift Array
let s = (arr as NSArray).componentsJoined(by:", ") // Cocoa Foundation method
// s is "Manny, Moe, Jack"
其次,Objective-C NSArray与Swift Array不同,是 immutable 。要改变它,就像add
或addObjects(from:)
一样,你需要一个NSMutableArray,它是不同的类(实际上是NSArray的子类)。
考虑到这一切,在考虑使用NSArray或NSMutableArray时问问自己:这真的有必要吗?在许多情况下,调用NSArray或NSMutableArray的Foundation方法是完全没有必要的。你正在使用Swift,所以你应该尽可能使用Swift Arrays。您可以使用Swift方法附加到Swift数组,例如append
和append(contentsOf:)
,只要它与var
一起声明;所以尽可能坚持下去。
因此,您可能对add
或addObjects(from:)
等NSMutableArray方法不感兴趣。
事实上,我已经给出了桥接的例子是完全没必要的,因为Swift有类似的方法:
let arr = ["Manny", "Moe", "Jack"] // Swift Array
let s = arr.joined(separator: ", ") // Swift method
答案 1 :(得分:1)
myItemArray.addingObjects(from: [itemTextField.text!]) // Using NSArray
或
myItemArray.append(contentsOf: [itemTextField.text!]) // Using Swift Array class
将数组的内容添加到数组中,而
myItemArray.addObject(itemTextField.text!) //NSArray uses addObject not append
或
myItemArray.append(itemTextField.text!) //With base Swift Array class
只添加一个对象。
第一个相当于循环遍历数组,然后调用addObject
或append
。
例如,如果您尝试添加数组[1, 2, 3]
的内容,则可以调用addingObjects
,或者遍历数组并调用addObject
或append
。