Swift playgrounds及playgroundbook學習心得
1.前言
吃盡了WWDC19的苦頭,以及在老師和學長的鼓勵之下,我決心在WWDC結束後依舊繼續攻克技術上的問題,即從xcode project到playground和playgroundbook的轉換,接下來,我將以之前的項目爲基礎,大概講講這到底是怎樣的一個流程。
2.Swift playgrounds
區別於xcode playground,Swift playgrounds是主要在ipad上運行的簡易編程軟件,對於學習Swift編程有很大的幫助,但它其實不適合我們去部署一個大的項目,最主要的原因是哪有一個程序員會選擇在ipad編程的啊,但是呢,爲了能很好地向大家普及這款軟件(其實它確實很不錯,這個可以自己多多去發掘),蘋果WWDC的提交格式就進行了限制,要求提交的爲Swift playground,而這個平臺雖然很不錯,但對於程序員來講debug這一個很重要的環節,而在這個平臺上不能很好地實現debug的功能,於是有人會選擇在project先進行調試,在完成之後再轉到playground上,所以咱們接下來就講講怎麼去轉,首先第一點,也是很重要的一點,在project裏創建項目的時候,最好不要使用storyboard進行UI設計,一切全都用代碼解決,不然後面會遇到很大的麻煩的(我就是這樣的…)
3.正言
3.1Playground
3.1.1代碼構建UI
這個很關鍵,在project裏你可能只需要加幾個button之類的,而在playground裏,你沒有storyboard,所以你要從基本的UIview開始建立,而且每個你添加的組件都要嚴格約束
let myUIView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: 1024, height: 768))
let bidiButton = UIButton(frame: CGRect(x: 0, y: 0, width: 300, height: 240))
let mangluoButton = UIButton(frame: CGRect(x: 0, y: 0, width: 300, height: 240))
類似這種
有關此處也不再贅述,但需要注意的是,對於每個控件的約束儘量做到盡善盡美,不僅是個好習慣,而且playground對這個還是比較嚴格的,不然你在playground上運行時出錯了你也不好找是在哪,但這些很可能會成爲一個問題。
3.1.2類和參數的修改
與project可以任意調用同一目錄下的類不同的是,playground裏面如果想暴露這個類和參數,那麼就要進行public聲明,
public class SplitViewController: UISplitViewController {
public var instrument_name:String = "0"
override public func viewDidLoad() {
super.viewDidLoad()
let masterNc:UINavigationController = UINavigationController(rootViewController: RootViewController(nibName: nil, bundle: nil))
let detailVc:UINavigationController = UINavigationController(rootViewController:IntroViewController(nibName: nil, bundle: nil))
self.viewControllers = [masterNc,detailVc]
let nav : UINavigationController = viewControllers.first as! UINavigationController
let vc : RootViewController = nav.topViewController as! RootViewController
vc.instrument_name = instrument_name
print(instrument_name)
self.preferredDisplayMode = .allVisible
// Do any additional setup after loading the view.
}
}
就現在上面這個代碼裏,我把整個類、instrument_name暴露給其他的類去調用和修改,而這個重寫函數的public是一個要求,具體的我也不知道,反正這麼做就對了。
3.1.3資源調用的區別
在project中,類似於沙盒,你不需要具體路徑,直接加載文件名即可,而在playground中
Sources中存放自己新建的swift文件,Resources中存放自己的素材文件,圖片音頻之類的,而在這裏的調用就得從Resources下一級目錄開始具體寫明。
titleImage.image = UIImage(named: "說明/第一頁/主題文字.png")
像這樣才能正確打開文件
3.2Playgroundbook
這個其實是官方給的一個模板,用這個可以把我們的項目轉成Playgroundbook然後發佈在ipad上,模板鏈接,
而這個其實和前面的差不多,沒太多的不同,需要注意到的一點是Playgroundbook的liveview和page機制,一個page對應的是一個liveview,你如果用之前的那種present做頁面跳轉,相當於跳出當前的liveview,這樣就意味着你得建立新的page和liveview,這樣其實是比較麻煩的,而最直接的解決辦法就是用PlaygroundPage.current.liveView這個方法指向你想要跳轉的頁面,這樣就可以在一個page裏展示多個頁面,不好的一點就是跳轉的比較生硬。
3.3雜
如果最後決定在ipad上發佈,那麼對於Playground,
箭頭指向的裏面不要存放建立UI的代碼,對於Playgroundbook,
Contents裏不要放建立UI的代碼,這兩個裏面都放你當前的liveview指向就好,因爲這裏並不是然你去構建項目的地方,而是你去做導引的地方,你要做的建立都在swift文件裏,這裏只是把這些文件給導出來,如果在這裏建立,ipad上會加載不了,我猜這個模塊的本意是做一些小的修改和調試,並不是讓你去在這裏建立一個項目的。
4.小結
其實轉成Playground和Playgroundbook本身的坑是在於代碼構建UI控件以及一些特殊的界面比如splitviewcontroller這種,這個得通過在網上搜索各種教程去實現,但是網上關於swift的教程還是比較少的,所以我推薦可以在YouTube上多看看學習學習。