Swift:addsObjects方法与append方法之间的区别

时间:2017-01-01 19:30:28

标签: arrays swift

我目前正在学习用于iOS开发的Swift 3,我想知道以下方法之间的区别:

if let myItemArray = itemObject as? NSArray
        {
            myItemArray.addingObjects(from: [itemTextField.text!])
        }

和以下方法:

 if let myItemArray = itemObject as? NSArray
        {
            myItemArray.append(itemTextField.text!)
        }

2 个答案:

答案 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 。要改变它,就像addaddObjects(from:)一样,你需要一个NSMutableArray,它是不同的类(实际上是NSArray的子​​类)。

考虑到这一切,在考虑使用NSArray或NSMutableArray时问问自己:这真的有必要吗?在许多情况下,调用NSArray或NSMutableArray的Foundation方法是完全没有必要的。你正在使用Swift,所以你应该尽可能使用Swift Arrays。您可以使用Swift方法附加到Swift数组,例如appendappend(contentsOf:),只要它与var一起声明;所以尽可能坚持下去。

因此,您可能对addaddObjects(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

只添加一个对象。

第一个相当于循环遍历数组,然后调用addObjectappend

例如,如果您尝试添加数组[1, 2, 3]的内容,则可以调用addingObjects,或者遍历数组并调用addObjectappend

相关问题