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上多看看学习学习。