关于
这篇文章简要介绍了苹果于WWDC 2014发布的编程语言——Swift。
前言
在这里我认为有必要提一下Brec Victor的Inventing on Principle,Swift编程环境的大部分概念都源自于Brec这个演讲。
接下来进入正题。
Swift是什么?
Swift是苹果于WWDC 2014发布的编程语言,这里引用The Swift Programming Language的原话:
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语言概览
基本概念
注:这一节的代码源自The Swift Programming Language中的A Swift Tour。
Hello, world
类似于脚本语言,下面的代码即是一个完整的Swift程序。
1 |
println("Hello, world") |
变量与常量
Swift使用var
声明变量,let
声明常量
1 2 3 |
var myVariable = 42 myVariable = 50 let myConstant = 42 |
类型推导
Swift支持类型推导(Type Inference),所以上面的代码不需指定类型,如果需要指定类型:
1 |
let explicitDouble : Double = 70 |
Swift不支持隐式类型转换(Implicitly casting),所以下面的代码需要显式类型转换(Explicitly casting):
1 2 3 |
let label = "The width is " let width = 94 let width = label + String(width) |
字符串格式化
Swift使用\(item)
的形式进行字符串格式化:
1 2 3 4 |
let apples = 3 let oranges = 5 let appleSummary = "I have \(apples) apples." let appleSummary = "I have \(apples + oranges) pieces of fruit." |
数组和字典
Swift使用[]
操作符声明数组(array)和字典(dictionary):
1 2 3 4 5 6 7 8 |
var shoppingList = ["catfish", "water", "tulips", "blue paint"] shoppingList[1] = "bottle of water" var occupations = [ "Malcolm": "Captain", "Kaylee": "Mechanic", ] occupations["Jayne"] = "Public Relations" |
一般使用初始化器(initializer)语法创建空数组和空字典:
1 2 |
let emptyArray = String[]() let emptyDictionary = Dictionary<String, Float>() |
如果类型信息已知,则可以使用[]
声明空数组,使用[:]
声明空字典。
控制流
概览
Swift的条件语句包含if
和switch
,循环语句包含for-in
、for
、while
和do-while
,循环/判断条件不需要括号,但循环/判断体(body)必需括号:
1 2 3 4 5 6 7 8 9 |
let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } } |
可空类型
结合if
和let
,可以方便的处理可空变量(nullable variable)。对于空值,需要在类型声明后添加?
显式标明该类型可空。
1 2 3 4 5 6 7 8 |
var optionalString: String? = "Hello" optionalString == nil var optionalName: String? = "John Appleseed" var gretting = "Hello!" if let name = optionalName { gretting = "Hello, \(name)" } |
灵活的switch
Swift中的switch
支持各种各样的比较操作:
1 2 3 4 5 6 7 8 9 10 11 |
let vegetable = "red pepper" switch vegetable { case "celery": let vegetableComment = "Add some raisins and make ants on a log." case "cucumber", "watercress": let vegetableComment = "That would make a good tea sandwich." case let x where x.hasSuffix("pepper"): let vegetableComment = "Is it a spicy \(x)?" default: let vegetableComment = "Everything tastes good in soup." } |
其它循环
for-in
除了遍历数组也可以用来遍历字典:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
let interestingNumbers = [ "Prime": [2, 3, 5, 7, 11, 13], "Fibonacci": [1, 1, 2, 3, 5, 8], "Square": [1, 4, 9, 16, 25], ] var largest = 0 for (kind, numbers) in interestingNumbers { for number in numbers { if number > largest { largest = number } } } largest |
while
循环和do-while
循环:
1 2 3 4 5 6 7 8 9 10 11 |
var n = 2 while n < 100 { n = n * 2 } n var m = 2 do { m = m * 2 } while m < 100 m |
Swift支持传统的for
循环,此外也可以通过结合..
(生成一个区间)和for-in
实现同样的逻辑。
1 2 3 4 5 6 7 8 9 10 11 |