语法解释:Swift中的方括号

Evg*_*ban 10 arrays ios swift

我正在研究Swift,并且对以下语法感到困惑:

 var treasures: [Treasure] = []
Run Code Online (Sandbox Code Playgroud)

宝藏是自定义类,声明如下:

class Treasure: NSObject {
...
Run Code Online (Sandbox Code Playgroud)

在Obj-C中,方括号表示方法,但这意味着什么:

  var treasures: [Treasure] = []
Run Code Online (Sandbox Code Playgroud)

有人可以提供解释吗?谢谢!

Luc*_*tti 15

好的,这是意思

var treasures: [Treasure] = []
Run Code Online (Sandbox Code Playgroud)
  • var:你要声明一个变量
  • 宝藏:变量的名称
  • [宝藏]:您的变量的类型,在这种情况下,类型为宝的数组,编译器将允许你插入式宝藏的唯一对象在你的阵列
  • []:变量引用的实际对象(Array),在本例中为空Array.

例如,如果您希望Array包含2个元素,您可以编写

var treasures: [Treasure] = [Treasure(), Treasure()]
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

更新: 我的例子也可以这样写

var treasures = [Treasure(), Treasure()]
Run Code Online (Sandbox Code Playgroud)

事实上,由于类型推断,编译器可以推断出看到指定值类型的变量宝藏的类型.


sie*_*ski 14

[Treasure] 只是一个语法糖Array<Treasure>.

同样的方法[String:Treasure]只是一种语法糖Dictionary<String,Treasure>.

[] 只是您定义的类型的空数组.同样的方式[:]是一本空字典.

说到Swift和方括号,规则很简单.它们仅在两种情况下使用:

1)使用数组和字典类型:

let vectors : [[Int]] = [[1,2,3],[4,5,6]]
let birthBook : [Int:[String]] = [1987:["John","William"], 1990: ["Mary"]]
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)

由于[]没有在运营商定制允许的,这是唯一的用途现在.