Swift day04 2016/1/21

今天去面試 ,沒聽課 ,根據(jù)上課講得做下筆記.

1. 閉包,(類似 OC 中的 Block) 是將一段代碼封裝起來,變成一個類型變量的東西,可以作為參數(shù)傳遞,類似一個沒有名字的函數(shù). swift 中閉包就是函數(shù),但比函數(shù)更加靈活.


//輸入輸出參數(shù)  (相當(dāng)于地址傳遞)  選擇
func selectSort(inout data : [Int], function : (Int,Int)->Bool ) {
    for var i = 0; i < data.count - 1;i++ {
        //記錄最小下標(biāo)
        var k = i  //假設(shè) i 位置最小
        for var j = i + 1; j < data.count; j++ {
//            if data[j] > data[k] {
            if function(data[j], data[k]) {
                k = j
            }
        } //循環(huán)是找到最小的值的下標(biāo)
        if k != i { //如果假設(shè)對了,不用交換
            swap(&data[k], &data[i])
        }
    }
}
//func rule(a : Int,_ b : Int) ->Bool {
//    return a > b
//}
//func rule2(a : Int,_ b : Int) ->Bool {
//    return a < b
//}
var data = [9, 3, 5, 1, 2, 6, 8, 7, 4, 3]
//selectSort(&data,function: rule2)
/*
語法:
    {
        (parameters 參數(shù)列表)->returnType返回值類型  in 
            code
        return xxxx
    }

*/
selectSort(&data, function:
    {
        (a : Int, b : Int)->Bool in
            return a > b
})
data
//閉包可以縮寫 或 省略
//參數(shù)類型可以省略
selectSort(&data, function:
    {
        (a, b)->Bool in
        return a > b
})
//返回值類型可以省略
selectSort(&data, function:
    {
        (a, b) in
        return a > b
})
//如果只有一條語句  return 可以省略
selectSort(&data, function:{(a, b) in a > b })
//參數(shù)名可以省略  $0是傳入的第一個參數(shù)  $1是傳入的第二參數(shù)
selectSort(&data, function:{ $0 < $1 })
//甚至可以直接省略掉參數(shù)
selectSort(&data, function:>)

//map 方法, 把數(shù)組每個元素取出放到閉包函數(shù)中執(zhí)行, 把所有的執(zhí)行結(jié)果放到一個新的數(shù)組

var newNums = numbers.map({
    (number : Int) ->Int in
        var n = number + 20
    return n
})
//拖尾閉包, 如果一個函數(shù)的最后一個參數(shù)傳入的是閉包函數(shù),可以寫在()外面,如果只有個一個參數(shù)() 可以省略
var newNums2 = numbers.map{
    (number : Int) ->Int in
    var n = number + 20
    return n
}

2.enum

枚舉中可以有方法

enum ConpassPoint {
     case North
     case South
     case East
     case West
     func show(){
       print(self)
     }
}
var p = CompassPoint.North
p.show()


enum CompassPoint2{
    case North, South, East, West
}

//聲明一個枚舉變量
var point : CompassPoint
//給一個枚舉變量初始化
point = CompassPoint.North
point = .South //沒有枚舉的名字,通過上下文環(huán)境找到對應(yīng)的枚舉



//原始值 (裸值)
enum Week : Int{
    case Sun = 0, Mon, Tur, Wen, Thu, Fri, Sat
}
// C 中可以 int week = Sun
//Swift 中 枚舉值不能直接當(dāng)做Int使用, 如果需要當(dāng)做Int使用,可以使用枚舉的原始值(裸值)
var week : Int = Week.Sun.rawValue //用原始值給 Int 賦值
var week2 : Week? = Week(rawValue: 0)



//關(guān)聯(lián)值
enum Barcode {
    case UPCA(Int,Int,Int)  //條形碼
    case QRCode(String)   //二維碼
}
var barcode = Barcode.UPCA(690, 690740102, 2)
barcode = Barcode.QRCode("ajkdlsjflkdsjf")
switch barcode {
case Barcode.UPCA(let(num, id, check)):
    print("這是一個條形碼\(num)-\(id)-\(check)")
case Barcode.QRCode(let string):
    print("這是一個二維碼 對應(yīng)的字符串是 \(string)")
}

3.類和結(jié)構(gòu)體

相同點:
1.類和結(jié)構(gòu)體都是在定義一種類型
2.都可以在內(nèi)部定義屬性和方法
3.都可以定義下標(biāo)運算符
4.都可以定義初始化方法(初始化器, 構(gòu)造器, init)
5.都可以擴展現(xiàn)有功能 (類似OC中Category 分類, swift中沒有分類)
6.都可以遵守指定的協(xié)議
不同點:
1.類可以繼承, 結(jié)構(gòu)體不可以繼承
2.類有多態(tài), 結(jié)構(gòu)體沒有多態(tài)
3.類的內(nèi)存管理支持自動引用計數(shù)器,而結(jié)構(gòu)體的內(nèi)存不使用引用計數(shù)器, 結(jié)構(gòu)體的變量都是在棧中分配的,出了作用域會自動釋放,棧中的空間不需要我們管理
4.類是引用類型, 結(jié)構(gòu)體是值類型

//類中的屬性聲明時必須初始化, 除非它是可選值
class VideoMode {
    var resolution = Resolution()
    var interloaced = false
    var frameRate = 0.0
    var name : String? //可選值
}
//結(jié)構(gòu)是值類型,類是引用類型
var res = Resolution() //值類型
var res2 = res
res.width = 500
res.width
res2.width
var vmode = VideoMode() //引用類型
var vmode2 = vmode
vmode.name = "張三"
vmode.name
vmode2.name
//實際上是比地址 === 相等 !== 不等
if vmode !== vmode2 {
    print("兩個引用 引用了不是同一塊地址")
}



var rect = Rect(origin: Point(x: 100, y: 100), size: Size(w: 500, h: 500))
print("矩形的原點x是\(rect.origin.x), y是\(rect.origin.y)")


//結(jié)構(gòu)體是用來封裝少量簡單的數(shù)據(jù)
//最簡單的像  幾何圖形  CGPoint CGRect CGSize
let cgPoint = CGPoint(x: 100, y: 200)

4.Properties屬性

Swift屬性 有兩個分類方式
第一種分類方式 :
存儲屬性 (Stored Properties)
用變量或常量保存屬性的值

計算屬性 (Calculate Properties)
不用變量或常量保存屬性值, 值是通過計算的出的

出生日期 : 儲存屬性
年齡 : 計算屬性 是通過 當(dāng)前日期 - 出生日期計算出來的

第二種分類方式:
實例屬性 和 類型屬性

屬性的附加: 屬性監(jiān)視器 (properties observer)
用于探知屬性的值是否發(fā)生了變化

struct FixedLengthRange {
    //存儲屬性  用一個變量或常量保存屬性的值
    var firstValue : Int
    let length : Int //逐一初始化器 也可以給常量初始化
}
var flr = FixedLengthRange(firstValue: 0, length: 3)


class DataManager {
    //延遲屬性  類似OC 中的懶加載 或 延遲加載的功能
    lazy var dataImporter = DataImporter()
    var data = [String]()
}

計算屬性


/******* 計算屬性  ***************/
struct Point{
    var x = 0.0, y = 0.0
}
struct Size {
    var w = 0.0, h = 0.0
}
struct Rect {
    //存儲屬性
    var origin = Point()
    var size = Size()
    //計算屬性
    //只有g(shù)et 是只讀計算屬性,  如果有g(shù)et set 是可讀寫計算屬性
    var center : Point {
        get{
            let centerX = origin.x + size.w * 0.5
            let centerY = origin.y + size.h * 0.5
            return Point(x : centerX,y : centerY)
        }
        set /*(newCenter) 如果這里沒有任何接收 默認使用 newValue*/ {
            let newOriginx = newValue.x - size.w * 0.5
            let newOriginy = newValue.y - size.h * 0.5
            origin = Point(x: newOriginx, y: newOriginy)
        }
    }
    
    //計算屬性 只讀計算屬性如果只有一行代碼 get 可以省略
    var center2 : Point {
        /*get {*/
            return Point(x: 500 + 100, y: 500 + 100)
        /*}*/
    }
}
var rect = Rect(origin: Point(x: 0, y: 0), size: Size(w: 300, h: 300))
rect.center.x
rect.center.y
rect.center = Point(x :200, y : 200)
rect.origin.x
rect.origin.y
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內(nèi)容