1. 程式人生 > >蘋果於WWDC 2014釋出的程式語言Swift

蘋果於WWDC 2014釋出的程式語言Swift

Swift是什麼?
Swift is a new programming language for iOS and OS X apps that builds on the best of C and Objective-C, without the constraints of C compatibility. Swift adopts safe programming patterns and adds modern features to make programming easier, more flexible and more fun. Swift’s clean slate, backed by the mature and much-loved Cocoa and Cocoa Touch frameworks, is an opportunity to imagine how software development works. Swift is the first industrial-quality systems programming language that is as expressive and enjoyable as a scripting language.
簡單的說: Swift用來寫iOS和OS X程式。(估計也不會支援其它屌絲系統) Swift吸取了C和Objective-C的優點,且更加強大易用。 Swift可以使用現有的Cocoa和Cocoa Touch框架。 Swift兼具編譯語言的高效能(Performance)和指令碼語言的互動性(Interactive)。 Swift語言概覽 基本概念 Hello, world 類似於指令碼語言,下面的程式碼即是一個完整的Swift程式。
  1. println("Hello, world"
變數與常量
Swift使用var宣告變數,let宣告常量。
  1. var myVariable = 42 
  2. myVariable = 50 
  3. let myConstant = 42 
型別推導 Swift支援型別推導(Type Inference),所以上面的程式碼不需指定型別,如果需要指定型別:
  1. let explicitDouble : Double = 70 
Swift不支援隱式型別轉換(Implicitly casting),所以下面的程式碼需要顯式型別轉換(Explicitly casting):
  1. let label = "The width is "
  2. let width = 94 
  3. let widthLabel = label + String(width) 
字串格式化 Swift使用\(item)的形式進行字串格式化:
  1. let apples = 3 
  2. let oranges = 5 
  3. let appleSummary = "I have \(apples) apples."
  4. let appleSummary = "I have \(apples + oranges) pieces of fruit."
陣列和字典 Swift使用[]操作符宣告陣列(array)和字典(dictionary):
  1. var shoppingList = ["catfish""water""tulips""blue paint"
  2. shoppingList[1] = "bottle of water"
  3. var occupations = [ 
  4.     "Malcolm""Captain"
  5.     "Kaylee""Mechanic"
  6. occupations["Jayne"] = "Public Relations"
一般使用初始化器(initializer)語法建立空陣列和空字典:
  1. let emptyArray = String[]() 
  2. let emptyDictionary = Dictionary<String, Float>() 
如果型別資訊已知,則可以使用[]宣告空陣列,使用[:]宣告空字典。 控制流 概覽 Swift的條件語句包含if和switch,迴圈語句包含for-in、for、while和do-while,迴圈/判斷條件不需要括號,但迴圈/判斷體(body)必需括號:
  1. let individualScores = [75, 43, 103, 87, 12] 
  2. var teamScore = 0 
  3. for score in individualScores { 
  4.     if score > 50 { 
  5.         teamScore += 3 
  6.     } else { 
  7.         teamScore += 1 
  8.     } 
可空型別 結合if和let,可以方便的處理可空變數(nullable variable)。對於空值,需要在型別聲明後新增?顯式標明該型別可空。
  1. var optionalString: String? = "Hello"
  2. optionalString == nil 
  3. var optionalName: String? = "John Appleseed"
  4. var gretting = "Hello!"
  5. if let name = optionalName { 
  6.     gretting = "Hello, \(name)"
靈活的switch Swift中的switch支援各種各樣的比較操作:
  1. let vegetable = "red pepper"
  2. switch vegetable { 
  3. case"celery"
  4.     let vegetableComment = "Add some raisins and make ants on a log."
  5. case"cucumber""watercress"
  6.     let vegetableComment = "That would make a good tea sandwich."
  7. case let x where x.hasSuffix("pepper"): 
  8.     let vegetableComment = "Is it a spicy \(x)?"
  9. default
  10.     let vegetableComment = "Everything tastes good in soup."
其它迴圈 for-in除了遍歷陣列也可以用來遍歷字典:
  1. let interestingNumbers = [ 
  2.     "Prime": [2, 3, 5, 7, 11, 13], 
  3.     "Fibonacci": [1, 1, 2, 3, 5, 8], 
  4.     "Square": [1, 4, 9, 16, 25], 
  5. var largest = 0 
  6. for (kind, numbers) in interestingNumbers { 
  7.     for number in numbers { 
  8.         if number > largest { 
  9.             largest = number 
  10.         } 
  11.     } 
  12. largest 
while迴圈和do-while迴圈:
  1. var n = 2 
  2. while n < 100 { 
  3.     n = n * 2 
  4. var m = 2 
  5. do { 
  6.     m = m * 2 
  7. while m < 100 
Swift支援傳統的for迴圈,此外也可以通過結合..(生成一個區間)和for-in實現同樣的邏輯。
  1. var firstForLoop = 0 
  2. for i in 0..3 { 
  3.     firstForLoop += i 
  4. firstForLoop 
  5. var secondForLoop = 0 
  6. forvar i = 0; i < 3; ++i { 
  7.     secondForLoop += 1 
  8. secondForLoop 
注意:Swift除了..還有...:..生成前閉後開的區間,而...生成前閉後閉的區間。 函式和閉包 函式 Swift使用func關鍵字宣告函式:
  1. func greet(name: String, day: String) -> String { 
  2.     return"Hello \(name), today is \(day)."
  3. greet("Bob""Tuesday"
通過元組(Tuple)返回多個值:
  1. func getGasPrices() -> (Double, Double, Double) { 
  2.     return (3.59, 3.69, 3.79) 
  3. getGasPrices() 
支援帶有變長引數的函式:
  1. func sumOf(numbers: Int...) -> Int { 
  2.     var sum = 0 
  3.     for number in numbers { 
  4.         sum += number 
  5.     } 
  6.     return sum 
  7. sumOf() 
  8. sumOf(42, 597, 12) 
函式也可以巢狀函式:
  1. func returnFifteen() -> Int { 
  2.     var y = 10 
  3.     func add() { 
  4.         y += 5 
  5.     } 
  6.     add()