我们为什么要使用" NSMutableArray"或者" NSMutableDictionary"在斯威夫特?

时间:2018-01-17 10:10:21

标签: ios arrays swift nsmutablearray

  1. var myArray : NSMutableArray = ["First", "Second","Third"]

  2. var myArray = ["First", "Second","Third"]

  3. 我们何时应该在Swift中使用上面给出的Array类型声明。

2 个答案:

答案 0 :(得分:7)

编写Swift代码时,您不需要使用NSMutableArray。 Swift数组自动桥接到Objective-C NSArrayNSMutableArray类型:

let fib = [1, 1, 2, 3, 5, 8, 13]  // immutable array bridged to `NSArray`
var friends = ["Pascal", "Jodie", "Craig"]  // mutable array bridged to `NSMutableArray`

当您使用Objective-C编写的Cocoa API时,将完成桥接。反之亦然,如果您因调用此类API而获得NSMutableArray,则可以将其分配给Swift Array,只要它是var。< / p>

作为桥接如何工作的一个例子,让我们假设UIKit的UITabViewController仍然是原生的Objective-C API(我不知道它是否是案件与否)。然后在Objective-C中,您可以获得@property viewControllers NSArray

NSArray<__kindof UIViewController *> *rootViewControllers;
rootViewControllers = [myTabViewController viewControllers];

但是在Swift中你可以将这个属性分配给一个常规数组(我明确地给它一个类型,但实际上并不需要类型推断):

let rootViewControllers: [UIViewController]? 
rootViewControllers = myTabViewController.viewControllers

相反,您可以将UIViewControllers的Swift数组传递给setViewControllers方法(在Objective-C中期望NSArray):

func buildInitialViewControllers() -> [UIViewController] { ... }

let rootViewControllers = self.buildInitialViewControllers()
myTabViewController.setViewControllers(rootViewControllers, animated=True)

答案 1 :(得分:0)

一般情况下,我们使用常量let c =和变量var v: [String] 但是当你进入NSSortDescriptor&amp;在这种情况下执行排序你必须使用NSArray&amp; NSMutableArray 它实现了功能

open func sortedArray(using sortDescriptors: [NSSortDescriptor]) -> [Any] // returns a new array by sorting the objects of the receiver

open func sort(using sortDescriptors: [NSSortDescriptor]) // sorts the array itself

相关问题