Swift Var中使用的数据结构以及var与类型的内部映射

时间:2016-06-23 14:13:26

标签: ios objective-c swift swift2

我是Swift的初学者

在Objective中,我们有独立的类型,他们有自己的数据结构。 例如:NsArray,NsDictionary将拥有自己的数据结构来存储值。

如果我没有明确指定变量的类型,它会自动假设它是一个NSArray,如果数组值被传递给它,那么Swift Var怎么样。

这里如何区分NsArray和NSMutableArray? 可能我得到了一个解决方案,这是为了不可变和var为可变。

如何将var内部映射到特定类型? 映射是否会在运行时发生?如果我没有明确指定类型,这会导致我的代码变慢吗?

并且会在Swift中扮演最终角色吗?

2 个答案:

答案 0 :(得分:4)

在Objective-C中,有一个基类NSArrayNSMutableArray是一个子类。

如果您愿意,您仍然可以在Swift中使用这些类。

然而,Swift的结构不同。在swift中,您声明一个变量或常量来指示容器是否可变:

let aNonMutableDictionary: [String:String] = 
  ["key1": "value1", "key2": "value2"];

创建一个常量字典(粗略的Swift等同于NSDictionary)

如果您想要一个可变字典,请使用

var aMutableDictionary: [String:String] = 
  ["key1": "value1", "key2": "value2"];

区别在于关键字letvarvar关键字定义了一个变量(它是可变的。)let关键字定义了一个常量(不可变)。

您应该阅读Swift编程指南。介绍非常清楚地解释了这一点。

答案 1 :(得分:3)

  

如果我没有明确指定变量的类型,它将自动假设它是一个NSArray,如果数组值被传递给它,那么Swift Var怎么样。

Swift没有“自动认为它是NSArray”。斯威夫特的ArrayNSArrayNSMutableArray不同。 Swift将透明地将其Array类型桥接到NSArray

  

这里如何区分NSArray和NSMutableArray?

Swift始终与NSArray桥接,可以将其传递到任何需要NSArrayNSMutableArray的调用中(因为NSMutableArrayNSArray的子类)。如果您需要NSMutableArray,则需要明确指定。

  

可能我得到了一个解决方案,让我们为immutable和var for mutable。

是的,Swift在分配给Array变量时使用var的可变版本,在分配给let常量时使用不可变版本。

  

如何将var内部映射到特定类型?映射是否会在运行时发生?

你是什么意思?

  

如果我没有明确指定类型,这会导致我的代码变慢吗?

没有。 Swift将尽可能使用不可变数据结构,这在性能方面是有利的。让编译器的类型推断完成它的工作。

注意:这些概念适用于其他类型,例如String / NSString / NSMutableStringDictionary / NSDictionary / NSMutableDictionary