Skip to content

Instantly share code, notes, and snippets.

@ezura
Last active December 20, 2015 08:29
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ezura/abeebfd52b1fc8d150b2 to your computer and use it in GitHub Desktop.
Save ezura/abeebfd52b1fc8d150b2 to your computer and use it in GitHub Desktop.
// 詳しい解説は下記
// https://trifort.jp/blog/development/%E6%8E%A2%E6%A4%9C%EF%BC%81swiftyjson-%E5%89%8D%E7%B7%A8/
struct SampleStruct {
var object:Any?
}
// ここに実装を追加していきます
// [] を実装
extension SampleStruct {
subscript(key: String) -> SampleStruct {
get {
return self
}
set {
object = key
}
}
}
extension SampleStruct : SequenceType {
// イテレータのようなもの
typealias Generator = SampleGenerator
func generate() -> Generator {
return Generator()
}
}
struct SampleGenerator : GeneratorType {
typealias Element = Int
var index = 0
mutating func next() -> Element? {
// 次がない場合は nil を返します
if (index > 10) { return nil }
return index++
}
}
extension SampleStruct : CollectionType {
typealias Index = Int
var startIndex: Index { return 0 }
var endIndex: Index { return 10 }
subscript (position: Index) -> Generator.Element {
return position
}
}
extension SampleStruct : BooleanType {
var boolValue:Bool { return true }
}
let sampleStruct = SampleStruct()
// try1
sampleStruct["sample"]
sampleStruct["sample"]["sample"]
// try2
sampleStruct.map({ $0 })
for element in sampleStruct { print(element) }
// try3
sampleStruct.first
for _ in sampleStruct.startIndex ..< sampleStruct.endIndex {}
// try4
if (sampleStruct) {}
while (!sampleStruct) {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment