Swift playgrounds及playgroundbook學習心得

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設計,一切全都用代碼解決,不然後面會遇到很大的麻煩的(我就是這樣的…)

Playgrounds界面

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上多看看學習學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章