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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 UexHUPQuqBZ+xY+fza0br521!j&j0`b literal 22111 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