From bc9501cb3549c5dc45eda8938a88fcf229a3eab2 Mon Sep 17 00:00:00 2001 From: acevest Date: Tue, 14 Mar 2017 12:56:37 +0800 Subject: [PATCH] swift-subscripts --- .../Contents.swift | 2 +- .../Methods.xcplaygroundpage/Contents.swift | 2 +- .../Contents.swift | 80 ++++++++++++++++++ .../AcePlay.playground/contents.xcplayground | 1 + .../UserInterfaceState.xcuserstate | Bin 22111 -> 21667 bytes 5 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 learn/AcePlay/AcePlay.playground/Pages/Subscripts.xcplaygroundpage/Contents.swift diff --git a/learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift index 78be21e..f3c040e 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift @@ -2,7 +2,7 @@ import Foundation -var str = "Hello, playground" +var str = "Hello, CollectionTypes" //: [Next](@next) diff --git a/learn/AcePlay/AcePlay.playground/Pages/Methods.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Methods.xcplaygroundpage/Contents.swift index 745b406..09c1ce8 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Methods.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Methods.xcplaygroundpage/Contents.swift @@ -2,7 +2,7 @@ import Foundation -var str = "Hello, playground" +var str = "Hello, Methods" //: [Next](@next) diff --git a/learn/AcePlay/AcePlay.playground/Pages/Subscripts.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Subscripts.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..8bf935f --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/Subscripts.xcplaygroundpage/Contents.swift @@ -0,0 +1,80 @@ +//: [Previous](@previous) + +import Foundation + +var str = "Hello, Subscripts" + +//: [Next](@next) + +// 下标可以定义在类、结构体和枚举中 + +struct TimesTable { + let multiplier: Int + + // subscript(index: Int) -> Int { + // get { + // 返回一个适当的 Int 类型的值 + // } + // set(newValue) { + // 执行适当的赋值操作 + // } + // } + + // 只读下标实现如下 + subscript(index: Int) -> Int { + return multiplier * index + } +} + +let sevenTimesTable = TimesTable(multiplier: 7) +print("six times seven is \(sevenTimesTable[6])") + + + +class Matrix { + let rows: Int + let cols: Int + var grid: [Double] + + init(rows: Int, cols: Int) { + self.rows = rows + self.cols = cols + grid = Array(repeating: 0.0, count: rows * cols) + } + + func indexIsValid(row: Int, col: Int) -> Bool { + return row >= 0 && row < rows && col >= 0 && col < cols + } + + subscript(row: Int, col: Int) -> Double { + get { + assert(indexIsValid(row: row, col: col)) + return grid[row*cols + col] + } + + set { + assert(indexIsValid(row: row, col: col)) + grid[row*cols + col] = newValue + } + } + + var description: String { + var s : String = "" + for i in 0.. + \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index 5d871e6e33c3a54256d6fa30308f8be2d4ec59ea..e07186e958dbf8c34d82a238656037c97603a052 100644 GIT binary patch literal 21667 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 -- 2.47.0