WWDC14 Session 406 學習筆記

昨天太貪玩,打了一晚上PSV就沒看視頻寫筆記。

前兩次分辨寫了 Swift入門和調試Swift。這一講就選擇了Swift 和 OC互相調用,這樣我們就能真正的做開發了。

這一講非常簡單,聽了一小時結果就總結了以下幾條內容。沒了…

  • 蘋果推薦使用 xxxxKit.framework 的方式進行代碼分離。這樣在Swift中只需要 import xxxxKit 對應OC中就是 @import xxxxKit 即可。

  • Swift調用沒有在framework中的Objective-C文件的時候,需要在MyApp-Bridging-Header.h中 import 對應頭文件。這個頭文件是創建.swift文件的時候會提示要不要自動生成的的時候創建的。如果當初手抖沒有創建的話,手動創建一個即可。

  • Trailing Closures 傳參的時候要用 in 語法。這是前兩個Session 沒提過的地方。如:

1
2
3
4
5
6
7
8
func testTrailingClosures(t:(a:Int, b:Int)->Int)
{
    println(t(a: 256,b: 2))
}
testTrailingClosures(){
  a,b in
    return a * b
}
  • 如果一個var是optional,也就是?,在調用的時候可以在後面再跟一個?代表,如果這個值存在就繼續,若不存在就什麼都不做。例如:
1
2
3
4
5
6
7
let a = ["miao":"Nyan"]

var str1:String? = a["miao"]
var str2:String? = a["nyan"]

str1?.stringByAppendingFormat("%d%d%d", 1,2,3)
str2?.stringByAppendingFormat("%d%d%d", 1,2,3)
  • oc調用swift的時候,直接MyApp-Swift.h 就好了。注意這個頭文件有點像Android的R.java是Xcode自動生成的,並不需要手動創建。

  • 在Swift method中,明明 xxx空格xxx,可以在oc中以oc風格調用代碼。如下:

1
2
3
4
5
6
7
8
9
10
11
12
import UIKit

class TTTestObject: NSObject {
    var data: NSData;
    var type: NSString;

    init(data:NSData, andType type:NSString)
    {
        self.data = data.copy() as NSData
        self.type = type
    }
}

使用的時候就可以:

1
2
TTTestObject* test = [[TTTestObject alloc] initWithData:[NSData data]
                                                andType:@"Nyan"];

若Swift調用就成了:

1
var obj = TTTestObject(data: NSData(), andType: "")

注意OC中initWith的 With是自動生成的

  • 在framework中swift調用oc代碼,不需要 bridge header。
  • 在framework中oc調用swfit,推薦在頭文件裡面@class xxxx 在m中 #import <xxxxxx/xxxx-Swfit.h>

  • 現在framework 可以內嵌第三方 framework了!和.a一樣! 在framework target裡面 選擇 embedded framework

Comments