转载

Swift 基础(一)

Swift is an innovative new programming language for Cocoa and Cocoa Touch. Writing code is interactive and fun, the syntax is concise yet expressive, and apps run lightning-fast. Swift is ready for your next iOS and OS X project — or for addition into your current app — because Swift code works side-by-side with Objective-C.

—— developer.apple.com

简单值(Simple Values)

在Swift中包含常量和变量两种类型的值。用let声明常量,用var声明变量。常量一旦赋值变不可改变。声明变量时,既可以显式的声明变量类型,也可以让编译器自己推断类型。

var myVariable = 42 myVariable = 50 let myConstant = 42 let implicaitInteger = 70 let explicitDouble: Double = 70 

使用方括号 [] 来创建数组和字典,并使用下表或者键来访问元素。同理,初始化数组或字典时,如果可以推断出数据类型,则无需显式声明类型。

var shoppingList = ["catfish","water","tulips","blue paint"] let emptyDictionary = [String: Float]() occupations = [:] 

控制流(Control Flow)

常用的控制流有 ifswitchfor-inwhiledo-while 等。

其中,if语句的条件必须是一个布尔表达式;同时我们也可以通过一起使用if和let来处理值缺失的情况。有些变量的值是可选得,一个可选的值可能是一个具体的值或者是 nil ,表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。

var optionalName: String? = "John Appleseed" var greeting = "Hello" if let name = optionalName {     greeting = "hello,/(name)" } 

如果变量的可选值是nil,条件会判断为false,大括号中的代码不会执行,如果不是nil,那么会将值赋给let后面的常量,这样代码块中就可以使用这个值了。

switch 语句中,当某一个case匹配时,程序会自动退出switch语句,所以无需在每个case结尾都写break了。

在循环中可以使用 ..< 来表示范围:

var firstForLoop = 0 for i in 0..<4 {     firstForLoop += i } 

其他的控制语句与常用方法类似。

函数和闭包(Functions and Closures)

在Swift中,使用func来声明一个函数。

  • 使用 -> 来指定函数的返回值,一个函数可以有多个返回值,多个返回值需要放在一个元组中
  • 函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式
  • 函数可以被嵌套
  • 函数可以作为另一个函数的返回值

    func makeIncrementer()->(Int->Int){  func addOne(number:Int)->Int{   return 1 + number  }  return addOne } var increment = makeIncrementer() increment(7)  
  • 函数也可以当做参数传入另一个函数

    func hasAnyMatches(list:[Int],ocndition:Int->Bool)->Bool{  for item in list {   if condition(item){    return true   }  }  return false } func lessThanTen(number:Int)->Bool{  return number < 10 } var numbers = [20,19,7,12] hasAnyMatches(numbers,lessThanTen)  

函数实际上是一种特殊的闭包,我们可以使用 {} 来创建一个匿名闭包。使用in将参数和返回值类型声明与闭包函数体进行分离。如果一个闭包的类型已知,可以忽略参数的类型和返回值。我们可以通过参数位置而不是参数名字来引用参数。

下面的两段代码是等价的:

numbers.map({  (number:Int)->Int in  let result = 3 * number  return result }) numbers.map({ number in 3 * number })  

对象和类(Objects and Classes)

使用 class 和类名来创建一个类。要创建一个类的实例,在类名后面加上括号。使用 . 来访问实例的属性和方法。

通过在类名后面加上父类的名字定义子类,用冒号分割。子类如果要重写父类的方法,需要用 override 标记。

override func simpleDescription()->String}     ... } 

属性可以有getter和setter方法。也可以通过使用willSet和didSet来实现在设置一个新值之前或者之后运行代码。

枚举和结构体(Enumerations and Structures)

使用 enum 来创建一个枚举。枚举可以包含方法。

使用 struct 来创建一个结构体。结构体和类之间最大的区别就是结构体是传值,类是传引用。

协议和扩展(Protocols and Extensions)

使用 protocol 来声明一个协议。类、枚举和结构体都可以实现协议。

protocol ExampleProtocol{     var simpleDescription: String{ get }     mutating func adjust() } 

泛型(Generics)

在尖括号里写一个名字来创建一个泛型函数。

func repeat<ItemType>(item: ItemType, times: Int) -> [ItemType] {  var result = [ItemType]()  for i in 0..<times {   result.append(item)  }  return result } repeat("knock",4)  

《The Swift Programming Language》 阅读总结

正文到此结束
Loading...