本章內容
Paste_Image.png
1. 創建擴展
Paste_Image.png
注意:這里的containing application指的是,當前的app。
創建完成后將出現下面這個文件夾,對應的是擴展的SB和swift文件。
Paste_Image.png
運行模擬器,就可以看到我們創建的Today了:
Paste_Image.png
2. 擴展和應用之間通信方式一:App Groups
通信原理:利用App Groups這個媒介,容器app和擴展都能訪問它。那么,容器app將數據存到App Groups,然后擴展從App Groups里面取出數據,這樣產生通信。
缺點:必須加入蘋果開發者計劃才能使用該功能
-
激活容器app的App Groups
在target-->capability中選擇如下圖
Paste_Image.png
Paste_Image.png 激活擴展的App Groups
操作步驟跟上面一樣,只不過將target選擇對應的擴展。容器app將數據存入App Groups
//這種初始化方法專門針對App Groups
//參數為對應app Groups的名稱
let userDefault = NSUserDefaults(suiteName: "group.Alet")
userDefault?.setObject("深圳", forKey: "city")
userDefault?.synchronize()
- 擴展從App Groups里面取出數據
let userDefault = NSUserDefaults(suiteName: "group.Alet")
//從App Groups里面獲取數據
let cityName: String = userDefault?.objectForKey("city") as! String
//顯示在Today上
city.text = cityName
Paste_Image.png
3. 通信方式二:擴展直接調用容器app的API
優點:不用加入蘋果開發者計劃
原理:將容器app的API用單獨的文件封裝,使得擴展也能使用這些文件里面的API,通過這些API來獲取數據。最好使用framework。
-
創建framework
Paste_Image.png -
將要封裝的swift文件扔進framework的文件夾中
Paste_Image.png
這里要封裝的文件是:weatherDataLoad.swift 這個文件里面包含loadData這個類,用來讀取數據。
-
將原來target中compile的文件刪掉
Paste_Image.png -
給framework添加需要編譯的文件
Paste_Image.png -
修改framework中文件的訪問權限
因為以前的文件的訪問權限默認為internal,而要訪問framework中的文件,就要設置類的訪問權限。
可以根據需求,在文件里面對應的類中設置,如下圖。
Paste_Image.png
Paste_Image.png -
設置擴展能夠使用這個framework
Paste_Image.png 最后在擴展的文件中引用這個framework包,就能使用對應的類啦!
其實這樣做的目的是:使得容器app和擴展都使用相同的API獲取數據,但他們之間互不干擾。