Ios 语法说明:Swift中的方括号

Ios 语法说明:Swift中的方括号,ios,arrays,swift,Ios,Arrays,Swift,我正在学习Swift,对以下语法感到困惑: var treasures: [Treasure] = [] 宝藏是定制类,声明如下: class Treasure: NSObject { } 在Objective-C中,方括号表示方法,但在Swift中它们是什么意思?[Treasure]只是数组的语法糖 同样的[String:Treasure]只是字典的语法糖 []只是您定义的类型的空数组。同样的[:]也是一个空字典 说到Swift和方括号,规则很简单。它们仅在两种情况下使用: 1) 使用数组

我正在学习Swift,对以下语法感到困惑:

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这个特殊变体的泛型。那么集合呢?