在 Swift 中編寫 watchOS 2 Hello World 程序

作者:codingexplorer,原文鏈接,原文日期:2015-12-08
譯者:mmoaay;校對:千葉知風;定稿:numbbbbb

過去的幾個月我一直保持著寫博客的習慣,但是現在我得專心工作了。最近在做一些 watchOS 2 相關的更新工作,我覺得如果出個系列教程會對大家很有幫助。首先我們需要學會開發第一個 watchOS 2 應用,所以下面來開發一個 watchOS 2 風格的 “Hello World!”吧!

在教程開始前,我準備介紹如何使用 Swift 在 iOS、watchOS、tvOS 和 OS X 上編程。此外,如果你想在本博客中學到其他知識,請給 Twitter @CodingExplorer 或者 Contact Page 來提出建議。

創建你的 watchOS 2 應用

打開 Xcode,創建一個新項目。可以使用初始界面,也可以通過菜單(File → New → Project…)。然后,定位到 watchOS 部分并選擇 Application,現在界面看起來是這樣的:

因為只有 “iOS App with WatchKit App“ 這一個選項,所以選中并點擊 next。接著你需要給應用起個名字然后做幾個選擇來初始化項目。我們把應用命名為 “HelloWatch“。簡單起見,你可以把下方的 the Notification Scene、Glance Scene 等選項關閉。雖然它們很有用,但是在這個項目中我們只需要生成一個簡單的 “Hello World“ 應用。當然,你需要確保將 Language 選項設置為 “Swift“。

這個項目是不會生成 iOS 應用的。如果你想知道如何在 iOS 上寫一個 Hello World 應用,請閱讀 Hello World! Your first iOS App in Swift
選擇好項目的保存位置,我們就可以開始編程了。選中導航面板中 “HelloWatch WatchKit App“ 分組中的 Interface.storyboard。

這個文件就是 watchOS 應用的界面文件。和 iOS “Hello World“ 應用類似,我們在應用中放置一個 label 和一個 button,點擊 button 會改變 label 的文本內容。

我們從 Object Library 拖一個 label 和 button 到 storyboard 上,然后把 label 放置在 button 的上方:

這時 label 看起來會比較擁擠,我們設置 width 為 “Relative to Container“ ,并將其值設置為 1,從而把 label 的寬度設置為屏幕的寬度。這個值代表了和屏幕寬高的百分比,所以 1 就是 100%,0.5 就是 50%,以此類推。我們在垂直方向上也給它更多的空間,把 Height 設置為“Relative to Container“ 然后將其值設置為 0.25 (即屏幕高度的 25%)。最后我們把 Text 設置為 “App Loaded…“,如果你喜歡還可以將其設置為居中顯示。

給 watchOS UI 添加一些 Swift 代碼

UI 已經 OK 了。現在我們把它和代碼連接起來,然后讓 button 去做一些事情。最簡單的方式就是打開輔助編輯器。點擊右上方的斜 venn 圖標即可:

如果需要更大的操作空間,可以點擊最右邊的按鈕(圖標是右側包含長條的方框)關閉工具面板。

然后,從 label 開始用 Ctrl+拖動或者右擊拖動的方式拉一條線到代碼中(根據慣例,一般是在類的頂部)。然后就會彈出對話框讓你給 label 的 outlet 命名。我們把它叫做 “displayLabel“。按照慣例我仍然建議采用駱駝命名法來給它們(也包括所有的變量)命名,以小寫字母開始,接下來每個單詞的首字母大寫(因為我們不能在變量名中加空格,所以我們以這樣的方式來表明這是一個新的單詞)。

接下來,我們對 button 做同樣的操作。從 button 開始用 Ctrl + 拖動的方式拉一條線到代碼中(可以是類范圍內的任意位置,據我所知,除了放在 outlet 下方,沒有其它特殊的慣例)然后創建一個 action。一定要確保連接的方式是 “action“。如果你創建的是 outlet,它可以讓你改變 button 本身的狀態,比如它的文本,但這不是我們在這里想做的事情:

再次確認這是一個 “Action“。它會創建一個叫 “buttonTapped“ 的方法,我們在這個方法里面寫我們的代碼。改變 WKInterfaceLabel 文本的代碼非常簡單,如下:

@IBAction func buttonTapped() {
    displayLabel.setText("Hello World!")
}

我們的方法中間只有 1 行代碼。我們調用了 WKInterfaceLabel 的 “setText“ 方法,然后把新的文本做為參數傳遞給它。在 iOS 中,我們通過一個叫“text“的屬性就可以輕松的改變 label 的顯示內容。但是在目前來說,watchOS 并沒有這樣一個屬性,我們甚至無法在程序中讀取文本內容,預計下一版本的 watchOS 會加入這個屬性,但是現在我們只能用 “setText“ 方法設置文本內容。

大功告成。如果你有 Apple Watch,可以把手機連接到 Mac,然后把這個應用安裝到手機上。你也可以使用模擬器。在左上角選擇 “HelloWatch WatchKit App“ 這個 target,然后選擇任意一個 iPhone 和 Watch 模擬器(或者選擇具體的 iPhone,如果你想在真機上測試),然后點擊 play 按鈕。你可能需要多點擊幾次 “play“ 按鈕(如果你的電腦沒有 SSD ,這可以減少加載模擬器的時間),最終你會見到下面的畫面:

點擊 button 之后就會看到:

完整起見,InterfaceController.swift 文件的所有代碼如下:

import WatchKit
import Foundation


class InterfaceController: WKInterfaceController {
    
    @IBOutlet var displayLabel: WKInterfaceLabel!

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)
        
        // Configure interface objects here.
    }
    
    @IBAction func buttonTapped() {
        displayLabel.setText("Hello World!")
    }

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()
    }

}

上面的大部分代碼都是模版自動生成的。

總結

文章中的代碼都是在 Xcode 7.1.1 中進行測試的。

這就是 watchOS 2 中 “Hello World!“ 應用。你會發現這篇教程非常簡單,其實這是有意為之。接下來的教程會經常引用這篇教程,這樣就可以避免重復 watchOS 應用的設置步驟。這個系列接下來的文章會更有趣,包括使用 WatchConnectivity 在 iOS 和 watchOS 2 應用之間傳遞數據以及并發實現。敬請期待更多的 watchOS 和 Swift 教程!

希望這篇文章對你有用。如果你覺得有用,請不要猶豫,把它分享到你的 Twitter 或者你喜歡的社交媒體,每次分享對我來說都很有用。當然,如果你有任何問題,請馬上通過 Contact Page 或者 Twitter @CodingExplorer 聯系我,我會盡我所能幫助你。謝謝!

本文由 SwiftGG 翻譯組翻譯,已經獲得作者翻譯授權,最新文章請訪問 http://swift.gg

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

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,158評論 4 61
  • 此時此刻,在回家轉的最后一班車的站臺上,隊伍從站臺的一頭排到了站臺的另一頭,為了等個座位我每天都往前...
    長頸鹿的小毛鬃閱讀 343評論 0 0
  • 文/管子 聽了一段王竑锜老師的視頻演講,他講到了人的組成,這個提法有新意。 我們都知道,一個...
    管子姐姐閱讀 965評論 0 0
  • 今天看的內容是巴克遇到了流動資金短缺的問題,他去到當地銀行貸款,卻沒有借到,能夠借的親戚朋友的錢都借了,員工伍德爾...
    hanxuerping閱讀 150評論 0 0
  • 蘆葦花季 喜歡蘆葦花 她 柔柔的 像棉花一樣細膩 她 像秋風一樣溫柔 她 帶著燕麥的芳香 有著驚海濤浪的動蕩 一陣...
    723edf844d12閱讀 202評論 3 5