Swift 学习 - subscript 下标语法

48 阅读1分钟

我们想快速访问 Stroy 结构体中的一个名为pages数组的某个元素,正常的做法是想先取出pages,然后再根据下标去取,有没有更快速的办法呢?

使用subscript下标!

结构体中使用下标

import Foundation

struct Story {
    let pages: [StoryPage]
    subscript(_ pageIndex: Int) -> StoryPage {
        return pages[pageIndex]
    }
}

struct StoryPage {
    let text: String
}

使用示例:

import SwiftUI

struct TestSub: View {
    @State private var text = ""
    var body: some View {
        Text(text)
        Button(action: {
            let test =  Story(pages: [StoryPage(text: "123")])
            let storyPage = test[0]
            text = storyPage.text
        }, label: {
            Text("TestSubscribe")
        })
    }
}

#Preview {
    TestSub()
}

打印结果:123

类中使用下标

class SomeClass3 {
    var pages: [StoryPage] = []
    subscript(_ pageIndex: Int) -> StoryPage {
        return pages[pageIndex]
    }
    init() {
        self.pages = [StoryPage(text: "1")]
    }
}

struct StoryPage {
    let text: String
}

let story = SomeClass3()
let page = story[0].text
// page = "1"

同样在数组中、字典中都可使用下标语法:

let array = [1,2,3,4]
print(array[1])
// 2
let dic = ["a":"b","b":"c","c":"d"]
print(dic["a"] ?? "")
// b