我们为什么要在Swift中使用"NSMutableArray"或"NSMutableDictionary"?

sub*_*272 0 arrays nsmutablearray ios swift

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

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

我们什么时候应该在Swift中使用上面给出的Array类型声明.

dir*_*ten 7

NSMutableArray编写Swift代码时不需要使用.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`
Run Code Online (Sandbox Code Playgroud)

当您使用Objective-C编写的Cocoa API时,将完成桥接.反之亦然,如果你得到一个NSMutableArray调用这样一个API的结果,你可以将它分配给一个Swift Array,只要它是一个var.

作为桥接如何工作的一个例子,让我们假设UIKit UITabViewController本身仍然是一个Objective-C API(我不知道是否是这种情况).然后在Objective-C中,你可以获得它@property viewControllersNSArray:

NSArray<__kindof UIViewController *> *rootViewControllers;
rootViewControllers = [myTabViewController viewControllers];
Run Code Online (Sandbox Code Playgroud)

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

let rootViewControllers: [UIViewController]? 
rootViewControllers = myTabViewController.viewControllers
Run Code Online (Sandbox Code Playgroud)

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

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

let rootViewControllers = self.buildInitialViewControllers()
myTabViewController.setViewControllers(rootViewControllers, animated=True)
Run Code Online (Sandbox Code Playgroud)