玩转 Xcode 中的 Playground

WWDC18上苹果介绍了Xcode10中Playground的新特性,包括支持机器学习模型训练、引入CreateML框架、增强的按步运行功能等。Playground适合用于API学习、数据处理及游戏动画测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WWDC18: 402: Getting the Most out of Playgrounds in Xcode

Swift 语言是苹果在 WWDC14 上正式发布的,与之同时发布的 Xcode6 中也第一次集成了 Playground 功能。两年后的 WWDC16 上,苹果发布了 iPad 专有的 Swift Playground 软件,帮助年轻人更好地学习使用 Swift 语言。今年的 WWDC18 上,苹果再次跟我们聊了聊“充分利用 Xcode 的 Playground 功能”。苹果如此不遗余力地推广 Swift 语言,如果这样还无法让你下定决心拥抱这门属于未来的语言,估计苹果也得急哭了。

更新不多,重点是机器学习

这次大会上发布的 Xcode 10中关于 Playground 的更新并不多,但有一个重点是 Playground 用来训练机器学习的模型,只要 import 新的Create ML 框架 即可。微博上已经有大佬玩了起来,看起来很厉害。

下面是 Xcode 10 中关于 Playground 的更新内容:

为机器学习量身打造的 Playground

  • 类 REPL 模式(Read-Eval-Print-Loop)可以快速重新运行已有的 playground 代码;
  • 运行指定行之前的代码,或者“shift+回车”运行刚写的代码;
  • Import 新的Create ML 机器学习框架 交互式地训练新的模型,在 playground 中写代码测试模型。完成之后,直接将模型运用在应用中。

关于 Create ML 框架这次大会上有一个单独的会场

基本功能

关于 playground 一些基本的介绍可以查看官方的帮助文档。 Playground 的一些基本用法包括Live ViewMarkup标记语言。

Live View

我们可以在 Playground 中可视化地查看自己的视图。实现起来也很简单:

import PlaygroundSupport
let viewController = /* 你的试图控制器 */

PlaygroundPage.current.liveView = viewController
复制代码

可以使用 Live View 快速测试自己想要做的动画或特效。这种形式非常适合学习官方 API,或者制作教程。国外著名设计师Meng To 的《Design+Code》教程中的动画设计部分就是用 playground 写的,每一行代码产生的效果都可以直接在 Live View 中看到,十分直观。

Markup

Playground 是支持 markdown 注释渲染的,只需要在单行或多行注释的后面添加冒号即可。某种意义上来说,你可以把 Playground 当成 markdown 编辑器来用。同时,Playground 还支持各种格式的资源,包括音频,视频,图片等等。而且,你既可以用标记语言引用这些资源,也可以用代码来引用。比如:

//  你可以用标记语言引用图片资源
 ![alternate text](MyPicture.jpg "hover title")
//  也可以直接用代码引用
 let image = UIImage(named: "image.jpg")
复制代码

Playground 支持多页面,新建 Playground Page 即可。同时页面之间的跳转也十分简单,有三种方式:

[上一页](@previous)
[下一页](@next)
[指定页](PageName)
复制代码

渲染起来也十分简单,打开右边栏,勾选“文件检查器”(file inspector)中的“Render Documentation”即可。

详细的标记语言语法参见苹果官方文档。同时,苹果官方有一个 Swift 语言标准库文档的 playground 文件模板,可以参观学习一下,说不定我们也可以试试用 playground 写文档。

按步运行(Xcode 10 新功能)

按步运行是 Xcode 10 中的一个新功能,鼠标在 Playground 的代码行移动时,行号那一列会变成蓝色播放键。点击行号上的播放键即可运行当前行以上的代码(包括当前行)。

已经运行过的代码播放键会变成灰色,如果鼠标所在行不形成一个完整的代码块(例如位于一个循环语句中)播放键也会显示为灰色。

这里要注意的一点是,已经执行过的代码不会再次运行。如果需要再次运行,需要点击下方 Debug 工具栏的 Stop 按钮。 重置 Playground 之后我们会发现之前运行过的代码前面的行号重新变成了蓝色,即“可运行”的状态。

那么在什么样的情况下建议使用 playground 呢?开发团队也给了建议:

  1. 自家 api 的按步骤的使用教程
  2. 处理一些数据的时候,比如地图数据,公开统计数据,班级作业等等
  3. 测试游戏 demo或者测试应用动画的时候

高级技巧

自定义显示类型

Xcode 9.3/Swift 4.1 中CustomPlaygroundDisplayConvertible替代了之前的CustomPlaygroundQuickLookable。可以通过CustomPlaygroundDisplayConvertible协议自定义 Playground 中的返回值显示类型。

extension MyType: CustomPlaygroundDisplayConvertible { 
    var playgroundDescription: Any { ... }
}
复制代码

下面的这段代码把Pitch的返回值重新定义为一个视图。

import xxx

let pitch = Pitch(.a, 4)

// 自定义返回类型为视图
extention Pitch : CustomPlaygroundDisplayConvertible {
    public var playgroundDescription: Any {
    // 创建视图并定义视图属性
    let view = createView()
    
    view.noteNumber = noteNumber
    view.octave = octave
    view.customText = description
    
    //返回视图
    return view
    }
}

复制代码

运行结果如下:

自定义类型可以是 Xcode 9.3/Swift 4.1支持的所有类型。

Playground 中使用自定义框架

引用自定义框架的方法也很简单。如果是简单的一个框架,直接把 Playground 文件拖到工程中即可。

如果是多个框架,把多个框架放在一个 workspace 里,然后再把 Playground 文件拖进去即可。

引用框架直接 import 即可。

最后,开发团队的人说他们的愿景是:

明年,每个工程里面都有一个 Playground 文件!

你觉得他们的愿景会实现吗?


总的来说,Playground 的使用场景还是聚焦在学习和试玩的层面,毕竟交互式的界面设计可以让学习者很快看到自己代码的结果,这样反馈对初期学习是十分重要的。我们也看到开发团队也做了很多努力,让我们在 Playground 中的东西可以直接应用到正式工程中。

所以,就像第二位讲者说的一样,Playground 是个“有趣”(fun)的地方,但是它是“严肃的乐趣”(serious fun),因为里面的东西都是可以复用的。Xcode 的 Playground 是苹果给开发者的一片游乐场,可劲儿玩吧!

PS,下面是本文涉及到的 Xcode Playground 的相关资源:

  1. Github 上一个收集各类优秀 Playground 的 Repo
  2. 苹果官方 Xcode 帮助文档
  3. 苹果 Markup 语法文档
  4. 苹果 Swift 语言标准库文档的 Playground 文件模板
<think>好的,我现在需要帮助用户解决在Xcode Playground中实例化和使用Swift类的问题。首先,我应该回忆一下Swift的基本语法和Xcode Playground的操作步骤。 用户提到了引用[3]中的内容,里面提到使用func来声明方法,以及如何调用方法。这可能与类的定义和方法的调用有关。因此,首先应该说明如何定义一个Swift类,包括属性和方法。 接下来,用户需要在Playground中实例化这个类。我应该分步骤讲解:创建类、实例化对象、访问属性和调用方法。同时,可能需要提到Playground的实时反馈功能,这样用户可以看到结果。 然后,考虑到用户可能不太熟悉Swift的初始化方法,比如init的使用,需要明确写出示例代码,比如定义一个Person类,包含name属性和greet方法,然后在实例化时传入参数。这样用户能清楚看到如何创建对象。 另外,引用[3]中还提到了可变参数和返回元组的方法,但用户的问题主要集中在类的使用上,所以这部分可能暂时不需要深入,除非有相关的问题。不过,可以提到如果类的方法包含这些特性,调用方式也是一样的。 还需要注意代码格式的正确性,确保在回答中使用正确的Swift语法,比如使用let或var声明常量或变量,使用点语法访问属性和方法。同时,提醒用户Playground会自动显示执行结果,比如使用print语句输出内容,或者在右侧边栏查看变量值。 最后,生成相关问题时要围绕类的定义、初始化、方法调用,以及可能遇到的常见问题,比如作用域、访问控制等。确保问题覆盖用户可能进一步探索的方向。</think>在Xcode Playground中调用Swift定义的类可分为以下步骤: 1. **定义Swift类** ```swift // 定义含属性和方法的类 class Person { var name: String var age: Int init(name: String, age: Int) { self.name = name self.age = age } func greet() -> String { return "你好,我是\(name),今年\(age)岁" } } ``` 2. **实例化与使用** ```swift // 实例化对象 let personA = Person(name: "张三", age: 25) // 访问属性 print(personA.name) // 输出"张三" // 调用方法 let greeting = personA.greet() print(greeting) // 输出"你好,我是张三,今年25岁" ``` 3. **实时交互特性** - 在Playground右侧边栏可实时查看变量值 - 使用`print()`函数或直接赋值给最后一行表达式显示结果 [^3]中提到的函数声明方式同样适用于类方法,例如可以添加带可变参数的方法: ```swift class Calculator { func sum(_ numbers: Int...) -> Int { return numbers.reduce(0, +) } } let calc = Calculator() calc.sum(1,2,3) // 显示结果为6 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值