Pra*_*wal 83 objective-c mutable immutability ios swift
我指的是Apple的Swift编程指南,用于理解用Swift语言创建Mutable/immutable对象(Array,Dictionary,Sets,Data).但我无法理解如何在Swift中创建不可变的集合.
我想在Objective-C中看到Swift中的等价物
不可变阵列
NSArray *imArray = [[NSArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];
Run Code Online (Sandbox Code Playgroud)
可变阵列
NSMutableArray *mArray = [[NSMutableArray alloc]initWithObjects:@"First",@"Second",@"Third",nil];
[mArray addObject:@"Fourth"];
Run Code Online (Sandbox Code Playgroud)
不变字典
NSDictionary *imDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];
Run Code Online (Sandbox Code Playgroud)
可变字典
NSMutableDictionary *mDictionary = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Value1", @"Key1", @"Value2", @"Key2", nil];
[mDictionary setObject:@"Value3" forKey:@"Key3"];
Run Code Online (Sandbox Code Playgroud)
nic*_*ael 110
创建不可变数组
第一种方式:
let array = NSArray(array: ["First","Second","Third"])
Run Code Online (Sandbox Code Playgroud)
第二种方式:
let array = ["First","Second","Third"]
Run Code Online (Sandbox Code Playgroud)
创建可变数组
var array = ["First","Second","Third"]
Run Code Online (Sandbox Code Playgroud)
将对象追加到数组
array.append("Forth")
Run Code Online (Sandbox Code Playgroud)
创建不可变字典
let dictionary = ["Item 1": "description", "Item 2": "description"]
Run Code Online (Sandbox Code Playgroud)
创建可变字典
var dictionary = ["Item 1": "description", "Item 2": "description"]
Run Code Online (Sandbox Code Playgroud)
将新对添加到字典中
dictionary["Item 3"] = "description"
Run Code Online (Sandbox Code Playgroud)
Abh*_*ert 30
Swift没有替换NSArray
Objective-C中的其他集合类.
有数组和字典类,但应注意这些是"值"类型,与作为"对象"类型的NSArray和NSDictionary相比.
差异很微妙,但对于避免边缘案例错误非常重要.
在swift中,您创建一个"不可变"数组:
let hello = ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
和一个"可变"数组:
var hello = ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
可变数组可以修改如下NSMutableArray
:
var myArray = ["a", "b", "c"]
myArray.append("d") // ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)
但是,您无法将可变数组传递给函数:
var myArray = ["a", "b", "c"]
func addToArray(myArray: [String]) {
myArray.append("d") // compile error
}
Run Code Online (Sandbox Code Playgroud)
但上面的代码适用于NSMutableArray:
var myArray = ["a", "b", "c"] as NSMutableArray
func addToArray(myArray: NSMutableArray) {
myArray.addObject("d")
}
addToArray(myArray)
myArray // ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)
您可以NSMutableArray
使用inout
方法参数实现以下行为:
var myArray = ["a", "b", "c"]
func addToArray(inout myArray: [String]) {
myArray.append("d")
}
addToArray(&myArray)
myArray // ["a", "b", "c", "d"]
Run Code Online (Sandbox Code Playgroud)
重写2015-08-10的这个答案,以反映当前的Swift行为.
只有一个Array
和一个Dictionary
类型的斯威夫特.可变性取决于你如何构建它:
var mutableArray = [1,2,3]
let immutableArray = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
即如果你创建一个变量赋值它是可变的,而如果你创建一个赋值给常量它不是.
警告:不可变数组不是完全不可变的!你仍然可以改变他们的内容,而不是他们的整体长度!
只需声明你的(任何)对象或变量
'let' key word -> for "constan/Immutable" array, dictionary, variable, object..etc.
Run Code Online (Sandbox Code Playgroud)
和
'var' key word -> for "Mutable" array, dictionary, variable, object..etc.
Run Code Online (Sandbox Code Playgroud)
有关更深入的信息
"使用let来创建常量,使用var来创建变量.在编译时不需要知道常量的值,但是必须为其分配一次值.这意味着您可以使用常量来命名您确定一次但在许多地方使用的值."
var myVariable = 42
myVariable = 50
let myConstant = 42
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
78714 次 |
最近记录: |