本章內(nèi)容
1. 創(chuàng)建擴展
注意:這里的containing application指的是排拷,當前的app猎唁。
創(chuàng)建完成后將出現(xiàn)下面這個文件夾误证,對應的是擴展的SB和swift文件。
運行模擬器盖腿,就可以看到我們創(chuàng)建的Today了:
2. 擴展和應用之間通信方式一:App Groups
通信原理:利用App Groups這個媒介爽待,容器app和擴展都能訪問它。那么翩腐,容器app將數(shù)據(jù)存到App Groups,然后擴展從App Groups里面取出數(shù)據(jù)鸟款,這樣產(chǎn)生通信。
缺點:必須加入蘋果開發(fā)者計劃才能使用該功能
-
激活容器app的App Groups
在target-->capability中選擇如下圖
激活擴展的App Groups
操作步驟跟上面一樣茂卦,只不過將target選擇對應的擴展何什。容器app將數(shù)據(jù)存入App Groups
//這種初始化方法專門針對App Groups
//參數(shù)為對應app Groups的名稱
let userDefault = NSUserDefaults(suiteName: "group.Alet")
userDefault?.setObject("深圳", forKey: "city")
userDefault?.synchronize()
- 擴展從App Groups里面取出數(shù)據(jù)
let userDefault = NSUserDefaults(suiteName: "group.Alet")
//從App Groups里面獲取數(shù)據(jù)
let cityName: String = userDefault?.objectForKey("city") as! String
//顯示在Today上
city.text = cityName
3. 通信方式二:擴展直接調(diào)用容器app的API
優(yōu)點:不用加入蘋果開發(fā)者計劃
原理:將容器app的API用單獨的文件封裝,使得擴展也能使用這些文件里面的API等龙,通過這些API來獲取數(shù)據(jù)处渣。最好使用framework。
-
創(chuàng)建framework
-
將要封裝的swift文件扔進framework的文件夾中
這里要封裝的文件是:weatherDataLoad.swift 這個文件里面包含loadData這個類蛛砰,用來讀取數(shù)據(jù)罐栈。
-
將原來target中compile的文件刪掉
-
給framework添加需要編譯的文件
-
修改framework中文件的訪問權限
因為以前的文件的訪問權限默認為internal,而要訪問framework中的文件泥畅,就要設置類的訪問權限荠诬。
可以根據(jù)需求,在文件里面對應的類中設置位仁,如下圖柑贞。
-
設置擴展能夠使用這個framework
最后在擴展的文件中引用這個framework包,就能使用對應的類啦聂抢!
其實這樣做的目的是:使得容器app和擴展都使用相同的API獲取數(shù)據(jù)钧嘶,但他們之間互不干擾。