protocol
// protocol protocol Printable { var type: String { get } var count : Int { get set} func printout() } class User : Printable{ let name: String // property let type = "Laser" var count = 0 init(_ name: String){ self.name = name } func printout(){ count += 1 print("\(type): \(count)") } } let tom = User("tom") tom.printout() tom.printout() tom.printout()
extension
// extension extension String { var length: Int { return self.characters.count } } let msg = "hello" print(msg.characters.count) print(msg.length) protocol Printable { func printout() } class User{ let name: String // property init(_ name: String){ self.name = name } }
// extension extension String { var length: Int { return self.characters.count } } let msg = "hello" print(msg.characters.count) print(msg.length) protocol Printable { func printout() } extension Printable { func printout(){ print("now printing...") } } class User: Printable{ let name: String // property init(_ name: String){ self.name = name } } let tom = User("tom") tom.printout
値の参照
// Int, Double, Array .. ->値型 // Class -> 参照型 // var original = 10 // var copy = original // original // original = 20 // print(original) // print(copy) class User{ var name: String // property init(_ name: String){ self.name = name } } var original = User("tom") var copy = original // originalのデータが格納されている場所 original.name = "bob" print(original.name) print(copy.name)
構造体
// 構造体 // クラスと同機能 struct User{ var name: String // property init(_ name: String){ self.name = name } mutating func changeName(){ self.name = name.Uppercased() } } var original = User("tom") var copy = original // originalの値 original.name = "bob" print(original.name) print(copy.name)
// 列挙型 enum Direction { case right case left } // var dir: Direction // // dir = Direction.right // dir = .right // switch(dir){ // case .right: // print("right") // case .left: // print("left") // } enum Direction: Int { case right = 1 case left = -1 } print(Direction.right.rawValue)