標籤:
Swift 文法小結
1. Optional 就是枚舉
An Optional is just an enum
enum Optional<T>{
case None
case Some(T)
}
2.Array的聲明
var a=Array<String>()
var a=[String]()
let a=[“A”,”B”,”C”]不可改
let b=a[3]
遍曆Array可使用for in
for array in a{
println(“\(array)”)
}
3.Dictionary
var dic=Dictionary<String,Int>()
var dic=[String:Int]()
dic=[“title1”:1,”title2”:2]
訪問一個dictionary的值將返回Optional
let value=dic[“title3”] 返回nil
使用tuple遍曆Dictionary
for (key,value) in dic {
println(“\(key)=\(value)”)
}
4.結構體Range 一個起點,一個終點,稱之為合理類型,Range是範型
struct Range<T>{
var startIndex:T
var endIndex:T
}
a.在Array中Range中的類型是Int型,因為Array是通過Int索引 Range<Int>
b.String中時String的索引 Range<String.Index>
c.聲明
let array=[“a”,”b”,”c”,”d”]
let subArray1=array[2...3] ([“c”,”d”]) 閉區間
let subArray2=array[2..<3] ([“c”]) 左閉右開區間
遍曆
for i in [27…104]{
println(“i=\(i)”)
}
5.NSObject(swift中所有的類都可以繼承NSObject)
Objective-C中所有類的基類,比如UIViewController
6.NSNumber 裝數位類
let n=NSNumber(double:35.5)
將會以自身的值轉為int或double
let intversion=n.intValue / n.doubleVaule /n.boolValue
7.NSDate 儲存日期,也可以擷取當前日期和時間
Calendar,DateFormatter,DateComponents
8.NSData 位元包
傳遞無類型資料,未經處理資料
9.資料結構 類,枚舉,結構
相同點:a.聲明類似 b.可以有自己的屬性和方法 c.都可以有自己的函數
不同點:a.Enum本身是不能儲存任何值的,可以將值儲存在枚舉的關聯資訊中
b.枚舉可以有計算型屬性
c.結構體和類可以初始化
d.類有繼承的性質,類型和轉化都屬於類的性質
e.枚舉和結構體是 值傳遞,類是 引用傳遞
10.override 重寫父類方法的關鍵字
final 可以將一個方法標為final,表示這個方法不能被重寫
11.類和執行個體都有自己的方法和屬性
var d:Double = -10
if d.isSignMinus {//isSignMinus是否是一個負數
d=Double.abs(d) //取絕對值
}
isSignMinus是執行個體d的變數或者說是d的屬性
abs是Double類的方法(所有對象共用),向該方法中傳入需要操作的Double類型的執行個體
類方法 static func abs(d:Double) -> Double
12.參數名
所有方法所有的參數都有一個內部名和外部名
內部名:在方法中擁有一個本地變數的名字,方法中冒號之前的
外部名:調用者準備使用的,調用方法是在冒號之前的
a.使用外部名
func foo(extenal internal:Int){
let local=internal
}
func bar(){
let result=foo(external: 123)
}
b.不使用外部名 _表示會被忽略,所有方法預設是採用該方式
//func foo(internal:Int)
func foo(_ internal:Int){
let local=internal
}
func bar(){
let result=foo(123)
}
c.強制使用內部名 #
func foo(#internal:Int){
let local=internal
}
func bar(){
let result=foo(internal:123)
}
d.非第一個參數推薦使用內部名和外部名,當然,你可以使用_忽略外表名,但這不是標準的做法
func foo(first:Int,externalSencond second:Double){
let local=second
}
func bar(){
let result=foo(123,externalSencond:5.5)
}
13.Property Observers(屬性觀察)
var someStoredProperty:Int = 42{
willSet{newValue}//屬性設定前被調用
didSet{oldValue}//屬性設定後被調用,可以用來對使用者介面進行更新
}
override var someStoredProperty{
willSet{newValue}
didSet{oldValue}
}
使用情境:a.在自己的類中需儲存屬性,當其他方法設定它的值時,獲得一個通知
b.當繼承了某些類,你並不需要對這些類中的屬性做什麼修改,但當它們改變時你想知道
14.lazy 只有用到的時候才會被初始化
a.如果使用了很多資源,用lazy是不錯的選擇
lazy var brain=CalculatorBrain()
b.初始化的時候在後面放一個大括弧,也就是通過執行這個閉包來初始化這個屬性,但這個閉包直有在property被用到的時候才會執行
lazy var someProperty:Type={
return <the constructed vaule>
}()
c.可以使用一個方法來進行初始化,只有標記為lazy才可以這樣用,因為在類初始化之前,類中的方法都是不可以被調用的
lazy var myProperty=self.initializeMyProperty()
15.initialization 初始化
a.無父類的類,預設有一個init()方法
b.如果一個結構體沒有初始化,它將預設得到一個將所有屬性作為參數的初始化方法,不需要實現
struct MyStruct{
var x: Int=42
var y: String=“moltuae”
init(x:Int,y:String)
}
c.在初始化方法裡面可以設定任何屬性的值,包括常量和變數
d.在類或結構體中可以調用自己的init方法 self.init(),類中可以調用父類的初始化方法 super.init()
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Swift 文法小結