此篇是为了以后查资料方便,推荐学习的时候照着 The Swift Programming Language 中 tutorial章节敲一遍代码,对照描述理解透彻。新建工程推荐playground,可以直接看到结果
// Playground - noun: a place where people can play import UIKit var str = "Hello, playground" class Shape{ var numberOfSides = 0 var name:String init (name:String){ self.name = name } deinit{ self.name = "hh" } func simpleDescription() -> String { return "Shape(\(self.name)) with \(numberOfSides) sides" } } var shape = Shape(name: "hello") shape.numberOfSides = 7 var shapeDescription = shape.simpleDescription() class Square: Shape { var userName:String{ get{ return self.name } set{ self.name = newValue } } var sideLength:Double init(sideLengh: Double,name: String){ self.sideLength = sideLengh super.init(name: name) numberOfSides = 4 } func area() -> Double { return sideLength * sideLength } override func simpleDescription() -> String { return "A square(\(self.name)) with sides of length \(sideLength)." } } let test = Square(sideLengh: 56, name: "momola") test.area() test.simpleDescription() var square = Square(sideLengh: 45, name: "mmola") square.userName square.userName = "loomongdidi" square.userName class TriangleAndSquare { var triangle:Square{ willSet{ triangle.sideLength = newValue.sideLength } didSet{ } } init(size:Double, name:String){ triangle = Square(sideLengh: size, name: name) } } var triangleAndSquare = TriangleAndSquare(size: 52, name: "another test shape") triangleAndSquare.triangle.sideLength triangleAndSquare.triangle.simpleDescription() // ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ enum Rank:Int{ case Ace = 1 case Two,Three,Four,Five,Six,Seven case Jack,Queen,King func simpleDescription()-> NSString{ switch self{ case .Ace: return "ace" case .Jack: return "jack" case .Queen: return "queen" default: return String(self.rawValue) } } } let ace = Rank.Ace var returnValue = Rank.simpleDescription(ace) let aceRawValue = ace.rawValue let threeDescription = ace.simpleDescription() let converedRank = Rank(rawValue: 1) converedRank?.simpleDescription() enum Suit { case Spades, Hearts, Diamods, Clubs func simpleDescription()-> String { switch self { case .Spades: return "spades" case .Hearts: return "hearts" case .Diamods: return "diamods" case .Clubs: return "clubs" } } func color()-> String { switch self{ case .Spades,.Clubs: return "black" case .Hearts,.Diamods: return "red" } } } let hearts = Suit.Diamods let heartsDescription = hearts.simpleDescription() let color = hearts.color() struct Card { var rank:Rank var suit:Suit func simpleDecription() -> String { return "The \(rank.simpleDescription()) of \(suit.simpleDescription())" } } let threeOfSpades = Card (rank: .Three, suit: .Spades) let threeofSpaderDescription = threeOfSpades.simpleDecription() enum ServerResponse { case Result(String,String) case Error(String) } let success = ServerResponse.Result("6:00 am", "8:09pm") let failure = ServerResponse.Error("Out of cheese.") switch failure { case let .Result(sunrise,sunset): let serverResponse = "Sunset:\(sunrise) and sunset is at \(sunset)" case let .Error(error): let serverResponse = "Failure...\(error)" } // mutating is aways needed in sturcture function, Class do not need because methods on a class can always modify the class protocol ExampleProtocol{ var simpleDescription: String {get} mutating func adjust() } class SimpleClass: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 69105 func adjust() { simpleDescription += " Now 100% adjusted." } } struct SimpleStructure: ExampleProtocol { var simpleDescription: String = "A very simple class." var anotherProperty: Int = 69105 mutating func adjust() { simpleDescription += " Now 100% adjusted." } } // how to use mtating var a = SimpleClass() a.adjust() let aDescription = a.simpleDescription extension Int : ExampleProtocol{ var simpleDescription: String{ return "the number \(self)" } mutating func adjust() { self += 42 } } 8.simpleDescription // Generics func repeat<Item>(item:Item,times:Int)-> [Item]{ var result = [Item]() for i in 0..<times{ result.append(item) } return result } repeat("knock", 4)