Ios 语法说明:Swift中的方括号
我正在学习Swift,对以下语法感到困惑:Ios 语法说明:Swift中的方括号,ios,arrays,swift,Ios,Arrays,Swift,我正在学习Swift,对以下语法感到困惑: var treasures: [Treasure] = [] 宝藏是定制类,声明如下: class Treasure: NSObject { } 在Objective-C中,方括号表示方法,但在Swift中它们是什么意思?[Treasure]只是数组的语法糖 同样的[String:Treasure]只是字典的语法糖 []只是您定义的类型的空数组。同样的[:]也是一个空字典 说到Swift和方括号,规则很简单。它们仅在两种情况下使用: 1) 使用数组
var treasures: [Treasure] = []
宝藏是定制类,声明如下:
class Treasure: NSObject { }
在Objective-C中,方括号表示方法,但在Swift中它们是什么意思?
[Treasure]
只是数组的语法糖
同样的[String:Treasure]
只是字典的语法糖
[]
只是您定义的类型的空数组。同样的[:]
也是一个空字典
说到Swift和方括号,规则很简单。它们仅在两种情况下使用:
1) 使用数组和字典类型:
let vectors : [[Int]] = [[1,2,3],[4,5,6]]
let birthBook : [Int:[String]] = [1987:["John","William"], 1990: ["Mary"]]
2) 对于订阅支持订阅的对象,请执行以下操作:
class RouteMapper {
private var routeMap : [String:String] = [:]
subscript(endpoint: String) -> String {
get {
if let route = routeMap[endpoint] {
return route
}
return "/"
}
set(newValue) {
routeMap[endpoint] = newValue
}
}
}
let routeMapper = RouteMapper()
routeMapper["users"] = "/v1/confirmed/users"
let url = routeMapper["admins"]
由于自定义运算符中不允许使用[
和]
,因此这些是目前唯一的用法。好的,这就是
var treasures: [Treasure] = []
- var:您正在声明一个变量
- 珍宝:变量的名称
- [Treasure]:变量的类型,在这种情况下,类型是Treasure数组,编译器将允许您在数组中只插入Treasure类型的对象
- []:变量引用的实际对象(数组),在本例中为空数组
例如,如果希望数组包含2个元素,则可以写入
var treasures: [Treasure] = [Treasure(), Treasure()]
希望这有帮助
更新:
我的例子也可以这样写
var treasures = [Treasure(), Treasure()]
实际上,多亏了类型推断,编译器可以通过查看赋值的类型来推断变量的类型。这是一个数组。var treasures:[Treasure]=[]行声明了一个名为treasures的数组,该数组应该包含Treasure类的对象,并用一个空的ArrayTank对其进行初始化。我喜欢这个解释,请告诉我,编译器是否会禁止我在数组中插入任何其他类型(不是Treasure)?如何在没有类型限制的情况下声明“简单”NSMutableArray?不客气。您可以创建“AnyObject”数组。它是所有类隐式符合的协议。这允许您编写类似于var things的内容:[AnyObject]=[“Hello world”,1,Treasure()]关于可变数组请注意,如果您使用var关键字声明可变数组,您将创建一个可变数组(就像您所做的那样)。相反,如果使用关键字let,则声明一个不可变数组。我是通过研究xctasertequal(expression1:[T:U],expression2:[T:U])的工作原理找到这个答案的。这是方括号的第三种可能性吗?我不知道它们在Xctasertequal中的含义。你知道吗?@LiweiZ他们没什么特别的。只是expression1和expression2属于Dictionary类型。T和U是xctasertequal这个特殊变体的泛型。那么集合呢?