Tag: playground

在Playground Book的Contents和LiveViewController之间传递数据

鉴于目前没有有关此主题的官方资源,将数据从Contents.swift传递到LiveViewController.swift可能会引起一些麻烦。 让我们看看如何一起做。 #下载官方模板 首先,您需要从Apple Developer网站下载官方模板:template 最初的项目为我们节省了很多时间,并且可以在xCode上使用并在Simulator和iPad上启动。 我们需要使用xCode打开项目,我们将找到我们通常在IOS上使用的经典ViewController ( LiveViewController.swift )和LiveView.storyboard ,以及在Playground Book上使用的标准Contents.swift和LiveView.swift文件。 我们要做的是将Playground Book ( Contents.swift )的左侧与右侧 ( LiveViewController.swift + LiveView.storyboard )进行通信。 #设置模板 我们需要添加一些文件来改进模板并使其强大。 现在,我们可以很快地复制LiveViewController.swift和LiveView.storyboard。 在第一个中,我们将其重命名为LiveViewController_1_1 .swift,我们必须打动父级LiveViewController,然后编写代码。 在第二个中,将其重命名为LiveView_1_1.storyboard ,我们需要关联我们的类LiveViewController_1_1。 #设置Contents.swift 在下面,您将找到要在Contents.swift文件中插入的代码行,我们将从中发送数据。 在示例中,我们传递的数据类型为String,但是可以对任何类型的数据执行该过程。 通过在左侧写一个字符串,我们将看到,单击“ 执行我的代码”后 ,输入的值将直接出现在标签的右侧 。 如果您打算传递其他数据类型 ,则需要用另一种类型将数据类型“ string”替换为:boolean,integer等… 您可以在这里下载该项目

操场上的UI编程

Applicationยปกติในการพัฒนา应用程序บนiOSส่วนของUIก็จะใช้เครื่องมือแสนสบายอย่างStoryboard(ถ้าเป็นก่อนหน้านี้ก็Interface Builder)กันมานานแล้วแต่ถึงแม้จะสะดวกสบายก็ยังมีข้อเสียอยู่หลายอย่างเช่น งCode故事脚本生成boardนมาทำให้合并ทำให้ยากมาก(Xcode 8ปรับปรุงแล้วนะ冲突กันอยแต่ก็าง) layรื่องของAutolayoutที่แก้ไขยากยิ่งกับ视图ที่การจัดวางซับซ้อนมากๆ动画ืนยุ่งกับ约束ุ่งกับยมันปวดหัวสุดๆในการนั่งไล่debugว่าอะไรเป็นอะไร SeายSegueIdentifier Flowิดเดีมมมมมมัgh gh Spaghettiดีๆี่เก็ี่เี่เ Story Story Storyboardใน版本หลังๆจะพัฒนาขึ้นมาได้มากซักแค่ไหนก็ดูเหมือนว่าถ้าเป็นหน้าที่布局ซับซ้อนมากๆเขียนUIด้วยโค้ดมันซะเลยมันก็ยังโอเคกว่าในระยะยาว UIาเป็นเมื่อก่อนการจินตนาการUIไว้ในหัวมันเป็นเนเรื่องยากและใช้เวลานานมากๆต้องเขียนไปbuildแต่เดี๋ยแต่เดี๋นี้มันง่ายขึ้นเยอะด้วย งทำย์ขอContentอผมจะต้องทำTableViewเป็Content Content Contentๆๆๆ์ขทั้ง์ขcell์ข์ข ถูกต้อง100%”(ไม่งั้นTableViewจะไม่คำนวนความสูงให้) Playรื่องมือที่ผมจะใช้คือ游乐场,cocoapods-游乐场และSnapKit cocoapods-playground เป็นเครื่องมือที่ช่วยที่ช่วราสร้าง游乐场项目ที่ติดตั้งpodsต่างๆไว้ด้วยได้สามารถติดตั้งและตามขั้นตอนที่https://github.com/segiddins/ThisCouldBeUsButYouPlayingส่วน SnapKit Kit น Library codeยน代码故事板แบบเต็มๆ(เพราะมันเทอะทะเหลือเกิน) ผมไปที่ริ่มต้นผมไปที่พิมพ์คำสั่ง $荚游乐场SnapKit Playากนั้น游乐场项目ที่มีCocoapodก็จะถูกสร้างขึ้นมาเปิดไฟล์SnapKit.xcworkspaceแล้วเลือก SnapKitPlayground scheme แล้ว构建ซะครั้งนึงรราก็จะ导入SnapKitเข้ามาใน操场เราได้แล้ว代码บรรทัดที่เกี่รทัดที่เกี่ยวข้องกับงกับาร导入จะเป็นแบบน งากนั้นเราก็สร้างcellขึ้นมาตามปกติ ได้อเราได้Cellตามที่ออกแบบและทดสอบสมใจก็复制โค้ดไปวางในViewของโปรเจคหลักได้เลยหรือใครจะสร้างเป็น文件ย่อยๆแล้วยกทั้งไฟล์ไปไว้เลยกทั้งไฟล์ไปไว้เลากันครับfile 权衡权衡มีข้อดีก็มีข้อมีข้ยครับวิธีนี้ผมชอบนะแต่ก็มีข้อเสียอยู่บ้างเหมือนกันดังนี้ งๆารแสดงผลบนหน้าจอขนาดต่างๆ —จะเห็นว่ามัน渲染เป็น默认大小storyยวบน故事板 ไม่支持选型课 — viewาจะทดสอบว่า视图แสดงผลอย่างไรบน特质ต่างๆของแต่ละ选型课…หมดสิทธิ์ครับ การจัดการ资源,渲染性能 —การจะใช้รูป,字体ต้อะๆาใส่เพิ่มเข้าไปอไปรวมถึงถ้ารูปใหญ่ๆimage(xcodeปิดตัวเอง)ไปเลยไปเล 安卓系统 —安卓系统开发者Layout.xml 调试侦听 — กนเป็องที่ปกติยที่ใหญ่ที่สุด ของ วิธี การนี้เลยถ้าเราลืมทำอะไรไปซักอย่างที่ปกติXcodeจะมีนจะมีfix-itให้นทำให้มันไม่渲染视图ขึ้นมาให้เราดูก็หากันไปทีละบรรทัด ยังกะเขียนเวบแน่ะตรงนี้หวังว่า游乐场版本หลังๆจะแก้ไขให้เราเนอะ งรับผมผมว่ามันสะดวกกับการทำงานแบบขึ้นโครง视图เป็นชิ้นเล็กๆก่อนนำไปประกอบรวมกันเป็น视图ใหญ่ๆอีกทีและผมชอบวิธีนี้มากกว่ากาการไปวาง布局ในStoryboardแล้วหล่ะ ส่วนคุณจะเลือกใช้ยังไงก็ลองดูตามความเหมาะสมและพึงพอใจครับ🙂 故障排除 ลิสต์ปัญหาที่อาจจะเจอได้บ่อยๆผมรวบรวมไว้ให้แก้ได้ง่ายๆ Use […]

了解Xcode游乐场

运动场是一种交互式环境,可以在其中输入和执行Swift代码,并实时显示结果。 这是学习Swift语法和iOS应用开发可视化方面的理想环境,而无需在通常伴随标准Xcode iOS项目的编辑/编译/运行/调试周期中连续工作。 我可以使用游乐场创建UI吗? 答案是肯定的。 Playground使您能够像在项目中一样设计UI。 您所需要做的就是将XCPlayground导入到您的游乐场。 而已! XCPlayground是一个框架,它扩展了UIViewController和UIView以采用XCPlaygroundLiveViewable协议。 该协议允许UIViews和UIViewControllers显示为游乐场页面的实时视图。 如果就是这样,让我们​​开始四处张望。 首先,我将通过在“ Sources”目录内的Swift文件中创建一个View Controller来构建表视图。 该目录中的所有文件都被编译到一个模块中,并自动导入到Playground中。 通过在具有public可访问性的那些文件中定义任何类型,函数或全局常量,我可以在Playground中使用它。 此外,与在创建任何项目时一样,将工作组织在单独的文件中也是一个好习惯。 如果不使用Playgrounds,则每次您要检查动画的组合方式时,都必须重新构建项目。 项目越大,花费的时间越长。 使用Playgrounds,您可以快速创建和优化动画,并获得正确的视觉反馈。 让我们进行一下拍摄,然后尝试通过创建一个包含两个图像视图的大视图来对昼/夜圆进行动画处理,其中一个视图用于太阳,另一个视图用于月球。 您可以将图像添加到“资源”文件夹中的操场上,在其中可以保留相关资源,例如图像,数据文件等。 基本上,在创建了这三个视图(赋予它们大小和添加约束)之后,我们将创建两个功能,一个功能为视图的背景色设置动画,另一个功能为太阳和月亮的运动设置动画。 同样,不要忘记使实时视图等于主视图(包含所有视图的视图)。

保持冷静并打开操场

我意识到“保持冷静并做任何事情 ”在这一点上可能已经被过度使用,现在属于不再那么酷的模因了。 但是话又说回来,这是我解决问题的方法,无论是否复杂。 当我想尝试一些东西时,我从一个操场开始。 快速浏览一下其中一些游乐场的内容后,我会不时清理一次“游乐场”文件夹。 通常这是一个很好的选择:“我可以写一篇有关此的文章!”我收到一条有关使用操场在背景图像上实现设计的奇特效果的推文,得到了令人愉快的反馈,因此我认为我应该写一篇发布有关此工具的信息。 对于新来者来说,操场似乎有些令人沮丧。 可以进行UI工作不是很明显。 它需要导入PlaygroundSupport框架,创建视图并将其提供给当前的PlaygroundPage …这些功能的可发现性不是那么好。 除非您不去阅读文档,否则就是这样。 导入PlaygroundSupport 导入UIKit let view = UIView(框架:CGRect(来源:.zero,大小:CGSize(宽度:500,高度:500))) view.backgroundColor = .red PlaygroundPage.current.liveView =视图 事实是,您不仅可以做很多事情:加载自定义字体,尝试自动布局约束,网络调用,甚至让用户尝试您的第三方框架。 我想写一篇有关Playgrounds的快速文章,因为对我来说,无论您是学习Swift还是尝试调整加载动画,它们都是一个很棒的学习工具。 我已经厌倦了看到对Apple提供的工具的负面看法。 我认为与之抗衡的最佳方法是谈论有效的工具。 而且Xcode游乐场肯定可以正常工作。

如何在斯威夫特操场采取STDIN

我知道要在STDIN和STDOUT中编程,我们需要在Xcode中创build一个命令行项目。 但是我如何在操场上进行标准input。 每当我尝试在操场上运行这样的代码 var input = readLine()! 我总是得到这个错误 执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_l386_INVOP,子代码= 0x0) 是否可以在运动场玩STDIN? UPDATE 我知道这个错误是因为没有 inputvariables,但想知道如何克服这个零值。

Swift NSCountedSet与数组错误?

Swift Playground中似乎有一个使用NSCountedSet的bug。 此代码按预期工作 let numbers = [1,2,2,4,6,7,8,8,5,8,1] let set = NSSet(array: numbers) 但是当我尝试以相同的方式创build一个NSCountedSet var bag = NSCountedSet(array: numbers) 我得到这个错误 Playground执行失败:/var/folders/bl/1tnlvfzd4mqb9gkpx0h8rxy00000gp/T/lldb/6514/playground599.swift:56:31:错误:'Int'与'AnyObject'不一致var bag = NSCountedSet(array:numbers) 我确实尝试了数字 let nums = numbers as [AnyObject] var bag = NSCountedSet(array: nums) 那么我得到这个错误 游戏场执行失败:/var/folders/bl/1tnlvfzd4mqb9gkpx0h8rxy00000gp/T/lldb/6514/playground732.swift:58:23:错误:在调用中的额外参数'数组'var bag = NSCountedSet(array:nums) 我在这里错过了什么? 我可以通过这样做来解决这个问题 var bag = NSCountedSet() for number in numbers { bag.addObject(number) } 但它不是很优雅

快速读取文件,iOS操场

通过search许多(许多!)快速的操场问题甚至制作这个代码,我仍然在挣扎。 我在包内容的Resources文件夹中放置了一个文本文件,它在运行库( /var/folders/ … )生成的运行临时文件中显示为别名(链接)。 import UIKit let bundle = NSBundle.mainBundle() let myFilePath = bundle.pathForResource("dict1", ofType: "txt") println(myFilePath) // <– this is correct, there is a shortcut to the Resource file at this location var error:NSError? var content = String(contentsOfFile:myFilePath!, encoding:NSUTF8StringEncoding, error: &error) println(content!) // <– this is *NOT* the file contents [EDIT: see later […]