我是Swift的初学者
在Objective中,我们有独立的类型,他们有自己的数据结构。 例如:NsArray,NsDictionary将拥有自己的数据结构来存储值。
如果我没有明确指定变量的类型,它会自动假设它是一个NSArray,如果数组值被传递给它,那么Swift Var怎么样。
这里如何区分NsArray和NSMutableArray? 可能我得到了一个解决方案,这是为了不可变和var为可变。
如何将var内部映射到特定类型? 映射是否会在运行时发生?如果我没有明确指定类型,这会导致我的代码变慢吗?
并且会在Swift中扮演最终角色吗?
答案 0 :(得分:4)
在Objective-C中,有一个基类NSArray
,NSMutableArray
是一个子类。
如果您愿意,您仍然可以在Swift中使用这些类。
然而,Swift的结构不同。在swift中,您声明一个变量或常量来指示容器是否可变:
let aNonMutableDictionary: [String:String] =
["key1": "value1", "key2": "value2"];
创建一个常量字典(粗略的Swift等同于NSDictionary)
如果您想要一个可变字典,请使用
var aMutableDictionary: [String:String] =
["key1": "value1", "key2": "value2"];
区别在于关键字let
和var
。 var
关键字定义了一个变量(它是可变的。)let
关键字定义了一个常量(不可变)。
您应该阅读Swift编程指南。介绍非常清楚地解释了这一点。
答案 1 :(得分:3)
如果我没有明确指定变量的类型,它将自动假设它是一个NSArray,如果数组值被传递给它,那么Swift Var怎么样。
Swift没有“自动认为它是NSArray”。斯威夫特的Array
与NSArray
和NSMutableArray
不同。 Swift将透明地将其Array
类型桥接到NSArray
。
这里如何区分NSArray和NSMutableArray?
Swift始终与NSArray
桥接,可以将其传递到任何需要NSArray
或NSMutableArray
的调用中(因为NSMutableArray
是NSArray
的子类)。如果您需要NSMutableArray
,则需要明确指定。
可能我得到了一个解决方案,让我们为immutable和var for mutable。
是的,Swift在分配给Array
变量时使用var
的可变版本,在分配给let
常量时使用不可变版本。
如何将var内部映射到特定类型?映射是否会在运行时发生?
你是什么意思?
如果我没有明确指定类型,这会导致我的代码变慢吗?
没有。 Swift将尽可能使用不可变数据结构,这在性能方面是有利的。让编译器的类型推断完成它的工作。
注意:这些概念适用于其他类型,例如String
/ NSString
/ NSMutableString
和Dictionary
/ NSDictionary
/ NSMutableDictionary
。