Course Notes: Cocoa with Swift 3 Essential Training

這是 Lynda - Cocoa with Swift 3 Essential Training 的學習筆記。由 Todd Perkins 老師講授。

1. Cocoa 解釋

基于 Mac 平臺開發的 App 都是 Cocoa App,基于 iOS 開發的 App 的技術支持是 Cocoa Touch。實際上 Cocoa 是 Apple 用來表述所有基于 Mac/iOS 系統的開發技術。更多信息在 Mac Technology Overview

2. Hello World

  1. Create a new Xcode project > Language: Swift > 所有選項不選 > Next
  2. 打開 MainMenu.xib > Utilities 面板 > Object Library > Filter: label > 拖入視圖 > 雙擊修改 Label 文本為 Hello world

3. 自定義 Controller 類

  1. file > new > Cocoa Class > 創建 NSObject 的子類 CustomController
  2. 給 MainMenu.xib 添加 Push Button
  3. 按住 Option 鍵點擊 CustomController.swift
  4. Object Library 中拖 Object 到左側 Delegate Object 下,在 Identity Inspector 面板中設置這個 Object 的 class 為 CustomController
  5. 這時候 MainMenu.xib 中的 Button 才可以做這個關聯操作:ctrl + 左鍵拖放至 CustomController.swift,創建一個 Action

4. Alert

let alert = NSAlert()
alert.messageText = "You can't do that!"
alert.runModal()

5. Alert Sheets

let alert = NSAlert()
alert.messageText = "You can't do that!"
alert.addButton(withTitle: "Button 1")
alert.addButton(withTitle: "Button 2")
alert.addButton(withTitle: "Button 3")
alert.beginSheetModal(for: window) { (responsCode: NSModalResponse) in
if(responsCode == NSAlertFirstButtonReturn){
        print("Button 1")
     }
}

6. 自定義 Delgate

定義一個 protocol

protocol CustomDelegate {
    func customDelegateExample()
}

創建 OtherObject.swift 遵循這個 protocol

class OtherObject: NSObject, CustomDelegate {
    func customDelegateExample() {
        print("delegation is working!")
    }
}

在 AppDelegate.swift 中聲明這個對象和delegate

var other:OtherObject!
var myDelegate:CustomDelegate!

實例化 class,告訴 myDelegate 誰實現了這個 protocol,執行委托方法

other = OtherObject()
myDelegate = other
myDelegate.customDelegateExample()

7. Menu

  1. .xib 中,從 Object Library 拖一個 Submenu Menu Item 至菜單視圖
  2. 拖 Menu Item 作為下拉菜單選項
  3. ctrl + 拖 Menu Item 至 .swift 文件創建 Actiion
  4. 或者在 .swift 中寫好 @IBAction,然后拖 Menu Item 至 First Responde,在浮動菜單中選擇想要執行的 Action,當這個 Menu Item 被點擊時,應用就從堆棧中找到實現了這個 Action 的類,執行它。

8. 單選按鈕

  1. 拖 3 個 Radio Button 到視圖中
  2. 3 個 Button 都指向同一個 @IBAction,它們就形成一組,點擊任意一個會變成唯一選中狀態
  3. 用 identifer 屬性區分每個 Button

9. Formatter

  1. 拖 Label 到視圖
  2. 再拖 Date Formatter 或者 Number Formatter 到 Label 上,屬性面板中修改需要的格式
  3. 給 Label 的 objectValue 賦值
    let date = NSDate()
    dateLabel.objectValue = date

10. API 創建用戶界面

let label = NSTextField(labelWithString: "example label")
label.frame = NSRect(x: 100, y: 100, width: label.frame.width, height: label.frame.height)
window.contentView?.addSubview(label)

11. 視圖組織

  1. 拖 3 個 Text Field 到視圖
  2. 選中這 3 個 Text Field > Editor > Embed In > Box,這 3 個 Text Field 就放在了一個 box view 中

12. Auto Layout

  1. 右鍵選擇 Leading Space to Container 之類...
  2. 或者點擊 pin 后 Add Constraints

13. TableView

  1. 遵循 NSTableViewDataSource
  2. 實現 numberOfRows 和 tableView(_ tableView: NSTableView, objectValueFortableColumn: NSTableColumn?, row: Int) -> Any? 方法

14. key-value

可以這樣設置一個對象的屬性

book.author = "Todd"

也可以這樣設置

book.setValue("Jimmy", forKey: "author")

讀取

print(book.value(forKey: "author"))

15. 綁定對象至 UI

  1. 選中 Label,選擇 Binding Inspector 面板
  2. Bind to: Delegate
  3. Model Key Path: self.book.author

16. NSException

創建一個 NSException

NSException(name: NSExceptionName.illegalSelectorException, reason:"what you just tried to do is not cool", userInfo: nil).raise()

創建一個 Exception Breakpoints 捕獲它

17. Assertion

在不滿足條件時拋出 assert

let num = 101
assert(num == 100, "num is supposed to be 100!")

18. 分發

非 Mac Store 的分發可以選擇 Product > Archive > Export as a macOS App

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,155評論 4 61
  • 我突然很明確地意識到我“生病”了,具體表現為情緒很煩躁,就想吵人,誰都敢吵,不分場合,象個瘋子,無所顧忌。 仔細想...
    定在閱讀 271評論 2 1
  • 原題 代碼庫的版本號是從 1 到 n 的整數。某一天,有人提交了錯誤版本的代碼,因此造成自身及之后版本的代碼在單元...
    Jason_Yuan閱讀 555評論 0 1
  • 第十期自控力早起群開始了新的打卡,這期先是5-7人組隊,小群打卡,隊長再匯總到大群打卡。 已經習慣了7點前起床,一...
    諸慧的身心園地閱讀 272評論 1 2