天道酬勤,学无止境

Xcode 10 Playgrounds 变量初始化的变化? Xcode 10 Playgrounds 是解释器吗?(Change in Xcode 10 Playgrounds Variable Initialization change? Are Xcode 10 Playgrounds an interpreter?)

问题

我注意到 Xcode 10 中的 Playgrounds 不再允许使用已声明但未初始化的变量。 例如:虽然此代码可以在 Xcode 9 playground 中运行,但在 Xcode 10 playground(至少在 Beta 1 中),它会崩溃:

var myValue: Int
//...
myValue = 100

print (myValue)

// Xcode 9 prints 100
// Xcode 10 reports an error: variables currently must have an initial value when entered at the top level of the REPL
  1. 这是新行为,还是当前 Xcode 10 beta 中的一个错误?

  2. 我一直将早期的 Xcode Playgrounds 称为解释器,但人们还会将 Xcode 10 playground 视为解释器吗(而且总是正确的)? Apple 将装订线中的“运行”按钮称为“编译”代码。

谢谢!

回答1

我遇到了这个错误。 我有两个不同的操场,一个有错误,一个没有。 问题是我的操场没有设置“自动运行”。 要设置该选项,请单击 Playground 中调试窗口顶部的播放箭头,您将看到“自动运行”选项,选择它。

必须是自动运行模式更像是运行整个程序,而手动运行则不是。

回答2

1) 如果您不初始化 let 声明的常量,您现在得到的错误是 Xcode 10 中的新错误,但仅在 Swift REPL 或操场中出现,如果您编译代码(见下文)则不会。

2) Swift Playgrounds REPL (Read-Eval-Print-Loop) 和解释器几乎但不完全相同。 REPL 是一个交互式文本编辑器,它读取您的代码语句、执行它们并打印结果,并在您编辑文本时循环。 当您在 Playground 中进行编辑时,Xcode 会一遍又一遍地重新执行编辑器中的所有代码,一次一行,就好像您每次都是第一次输入每一行一样。 这与解释器的不同之处仅在于解释器通常从输入文件中读取代码,一次一行地解释和执行它,而不是在执行开始之前先将其全部编译并链接到机器代码。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Change in Xcode 10 Playgrounds Variable Initialization change? Are Xcode 10 Playgrounds an interpreter?
    I've noticed that Playgrounds in Xcode 10 no longer allow for the use of declared, but uninitialized variables. For example: while this code would work in an Xcode 9 playground, in an Xcode 10 playground (at least in Beta 1), it crashes: var myValue: Int //... myValue = 100 print (myValue) // Xcode 9 prints 100 // Xcode 10 reports an error: variables currently must have an initial value when entered at the top level of the REPL Is this the new behavior, or just a bug in the current Xcode 10 beta? I had been referring to earlier Xcode Playgrounds as an interpreter, but would one still consider
  • Xcode Playgrounds Shared Directory Not Working
    When creating an Xcode Playground, the supported playgroundSharedDataDirectory does not properly show my the expected directory. Expected: ~/Documents/Shared Playground Data Actual: file:///var/folders/46/zg_mg07d5h5_9t6q_4vr9_2w0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-BEF6F13E-994E-45C9-A18E-7DE953069D69/Documents/Shared%20Playground%20Data/ import UIKit import PlaygroundSupport print(playgroundSharedDataDirectory) This also does not link to the directory. If I place a file in the correct directory, I cannot read it. If I place it in
  • iOS Playgrounds 是否支持 UIView 动画?(Does iOS Playgrounds supports UIView animations?)
    问题 是否可以在 Playground 中使用 animateWithDuration 预览为 UIView 完成的动画? 我在 UIView 初始化后立即添加 XCPShowView,无论我选择时间轴上的哪个位置,它都会以最终状态显示所有内容。 回答1 Xcode 7 更新: XCPShowView已弃用,但您可以在 Playground liveView 中看到动画。 还有更多即将推出:互动游乐场 这是 Joseph Chen 示例代码的更新。 我还将颜色更改为绿色,因为容器默认背景为黑色: import UIKit import XCPlayground let container = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 100.0)) // XCPShowView("container", view: container) // -> deprecated let view = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 50.0, height: 50.0)) view.backgroundColor = UIColor.greenColor() container.addSubview(view) UIView
  • Swift游乐场可以查看同一项目中的其他源文件吗?(Can Swift playgrounds see other source files in the same project?)
    问题 我在项目中的一个单独的Swift文件中创建了最简单的自定义类: class Foo { init() { println("I made a foo.") } } 然后,在同一个项目的操场上,我尝试了 var x = Foo() Xcode似乎不喜欢这样,并告诉我'Foo'是一个未解决的标识符。 我对操场如何适应项目其余部分感到困惑,因为我项目中的其他任何Swift文件都可以毫无问题地解决“ Foo”问题。 如何使我的游乐场能够使用在项目中其他Swift文件中定义的自定义类? 我尝试为构建目标命名产品模块,然后将其导入到Playground中,但没有成功:Playground无法识别产品模块的名称。 在此先感谢您的协助。 我知道这很简单。 回答1 他们不可以。 操场是独立的。 希望将来会有所改变。 编辑:从Xcode 6.3开始,Playgrounds现在可以包含支持代码。 他们仍然看不到同一项目中的其他代码,但是可以将代码添加到Playground的支持文件夹中,以便在操场上使用。 有关更多信息,请参见Swift博客。 回答2 有两种方法可以在Playground中使用项目的代码 操场的来源文件夹 是的,在Xcode 6.3 Beta 3中(并且希望在将来): 现在,操场在Xcode中以捆绑形式显示,并带有一个显示三角形,该三角形在单击时会显示“资源”和“源”文件夹。
  • 带有UIImage的Swift游乐场(Swift playgrounds with UIImage)
    问题 我正在使用Xcode 6,并且正在尝试重新创建在会话401“ Xcode 6的新功能”中演示的代码。 我已将图像添加到Images.xcassets(称为Sample),并且在运动场文件中尝试按演示方式访问该图像。 我的代码如下(如演示): var sample = UIImage(named: "Sample") 但是,我无法使其像演示一样工作。 我想念什么吗? 回答1 在Finder中打开.playground文件。 在它旁边创建一个名为Resources的文件夹。 将您想要的任何图像添加到此文件夹。 在操场上,按opt-cmd-1打开File Inspector。 您应该会在右边看到游乐场。 如果尚未选择,请按cmd-1打开“项目导航器”,然后单击“游乐场”文件。 在“资源路径”下,选择“相对于游乐场” 单击下面的文件夹图标,然后选择先前创建的资源文件夹。 现在,您应该拥有一个可以与标准NSImage一起使用的捆绑软件(名称:“ filename_without_extension”): 注意:因为Xcode会经常覆盖.playground文件夹,所以我建议使用此方法,这样资源文件夹就不会经常删除和重新创建。 回答2 查看iOS开发者库->游乐场帮助并搜索“资源文件”,您将找到答案 1,打开.playground 2,通过选择视图>导航器>显示项目导航器来显示项目导航器
  • Xcode 自动完成在 Swift 游乐场的 Sources 文件夹中不起作用(Xcode autocomplete does not work in Sources folder of Swift playgrounds)
    问题 我正在开发一个 Swift 游乐场,它在主文件旁边的 Sources 文件夹中包含多个文件。 当我在主文件中输入一些东西时,例如“UI”,我得到了预期的自动完成建议。 但是,当我在 Sources 文件夹中的文件中执行相同操作时,会得到一个“哑”自动完成菜单,如以下问题所示:Xcode 9 Autocomplete Not Working 100% - Partially Working 我已尝试按照上述问题中的建议删除DerivedData ,甚至不遗余力地完全重新安装 Xcode。 然而,问题并没有消失。 我创建了一个新的 Playground 以确保它不是特定于这个项目的,并且发生了同样的问题。 编辑:我只是在不同的 Mac 上尝试了同样的事情,但观察到了同样的问题。 我想这只是 Xcode 中的一个错误,与此特定安装或项目无关。 回答1 为了启用自动完成,您可以将您的 Playground 嵌入到常规 Xcode 项目(例如 iOS 应用程序)中。 我建议为此目的创建一个虚拟项目。 只需将您的游乐场拖放到这个虚拟项目中,并确保选中“添加到目标”。 然后你可以导航到 Target -> Build Phases -> Compile Sources -> + -> Add other 并添加源文件夹中的所有文件。 请注意,您不需要实际复制文件,参考就足够了。
  • Swift Playgrounds:替换为 captureValue(_:withIdentifier:)(Swift Playgrounds: Replacement for captureValue(_:withIdentifier:))
    问题 Xcode 7.3 已弃用XCPlaygroundPage.currentPage.captureValue(_:withIdentifier:) 。 它的前身XCPCaptureValue()在 Xcode 7.1 中已被弃用。 我想知道除了隐式捕获集合和循环之外是否有任何替代? 除了使用显式方法更加灵活之外,向图形添加标题的能力似乎随着弃用/删除而消失了(尽管找到了符号,但上述弃用的方法没有做任何事情,或者至少不是您所做的) d 期望)。 回答1 目前没有替代品或替代品。 图形仅隐式显示。 我已经在 WWDC 2016 的 Swift/Xcode 实验室中验证了这一点。如果有任何进展,我已经提交了一份雷达并将更新这个问题。 回答2 使用currentPage属性: XCPlaygroundPage.currentPage.captureValue(_, withIdentifier:)
  • 如何在操场上使用可可足类?(How to use cocoapods with playground?)
    问题 在使用我的主要项目实施它之前,我正在尝试一些吊舱,我想确保它可以正常工作以满足我的要求。 最简单的方法是在操场上尝试。 我在操场上尝试了pod init ,但无法正常工作 [!]找不到xcode项目,请指定一个 非常感谢您的帮助。 回答1 这是一个古老的问题,但显示在Google的顶部。 这可能是我们但您在玩是一个命令行工具,可使用集成的cocoapod创建一个新的Xcode游乐场。 它还支持一次集成多个椰壳足纲。 这是一个命令。 安装: gem install cocoapods-playgrounds 使用: pod playgrounds Alamofire 等待游乐场打开,然后建造它。 回答2 对于使用CocoaPods的预发行版1.0版本的用户,不建议使用@samuel使用的'link_with'指令。 我尝试仅将我的游乐场添加为Podfile中的目标,但是CocoaPods无法将其识别为有效目标。 我发现为我需要使用的Pod添加一个方案并手动构建它可以按此处讨论的方式工作。 为了演示这一点,我创建了一个示例项目,并将Alamofire集成到此处的Playground中。 我也遇到了这个图书馆。 我还没有机会使用它,但是它看起来很有希望。 此外:如果您想在Playground中发出异步请求(例如,使用Alamofire),则需要启用此处所述的不确定执行。
  • How do you prevent Xcode 7 Playgrounds from automatically running?
    I'm working on an Xcode 7 Playground that has many things running at once. Whenever I make an edit, it refreshes, restarts what was running and runs through the entire code again. That crashes my playground around every 15 minutes. Is there a way to prevent playgrounds from automatically running whenever I make an edit?
  • Xcode autocomplete does not work in Sources folder of Swift playgrounds
    I am working on a Swift playground that contains multiple files in the Sources folder alongside the main file. When I type something, for instance, "UI", in the main file, I get the expected autocomplete suggestions. However, when I do the same in files in the Sources folder, I get a "dumb" autocomplete menu as seen in this question: Xcode 9 Autocomplete Not Working 100% - Partially Working I have tried deleting DerivedData as suggested in the above question, and have even gone to the lengths of reinstalling Xcode entirely. However, the problem has not gone away. I have created a new
  • 游乐场导入:没有这样的模块“ Foo”(Playground Import: No Such Module 'Foo')
    问题 我一直遵循Apple的指示将自定义模块导入操场,包括此处的指示。 但是我得到了: 游乐场执行失败:/var/folders/z3/kd0nj4ln1rgcpm8bdz7067wh0000gs/T/./lldb/1874/playground1.swift:7:8:错误:无此类模块'Foo'导入Foo 如何恢复到Playground的正常导入状态? [编辑:注意,有两个答案已经给出了将游乐场与框架相关联的详细说明; 我遵循了这些指示,但是没有运气。 该解决方案将需要重新配置Xcode中的某些内容。 我的安装显然已损坏] 错误和尝试的详细图片: 这是基于@EricD的答案的另一种尝试,显示了目录结构,没有骰子。 回答1 对于上述解决方案均不起作用的那些解决方案(并且Xcode构建路径设置已设置为Unique ),我找到了一个解决方案。 该框架必须使用iOS模拟器设备(列表中的任何设备)而不是Generic iOS Device的方案构建,因为Playgrounds不支持该方案。 这个为我工作: 回答2 这是我使用Xcode 7.1进行OS X的方法: 创建新项目:OS X Cocoa Framework,Swift。 在此示例中,我将其命名为“ TestPlaygroundFMK”。 创建一个新的Swift文件。 在文件中添加一个类。 该代码必须是公开的。 我为我们的示例做了这个
  • 如何在 Playground 中使用 Swift 包管理器(How to use Swift Package Manager in Playground)
    问题 是否可以在 Xcode Playground 中使用 Swift Package Manager? 回答1 目前无法在 Playground 中使用 Swift Package Manager。 原因是 Swift Package Manager 主要在苹果平台之外使用。 Apple 在 Swift Package Manager 的 GitHub 上提到了这一点: 请注意,此时包管理器不支持 iOS、watchOS 或 tvOS 平台 Swift Package Manager 对于为 Linux 和 Mac 等平台编写 Swift 尤其有用。 用途可能包括创建基于 Swift 编写的服务器或编写无需用户界面即可运行的程序(想想家庭自动化和物联网)。 这是一种无需使用 Pod 或其他第三方设置即可组织包的好方法。 当您构建用于生产(或调试)的代码时,它将下载包并将其合并到项目中。 注意:这在未来可能会改变,但从 Swift 3 开始是最新的 回答2 在 Xcode 12 中,您可以将 Swift 包与 Xcode Playgrounds 一起使用。 使用 Swift 包和 Playground 设置工作区的步骤: 打开 Xcode 创建一个新的工作区( File > New > Workspace... ) 通过File > Add Files to "Workspace
  • 在Swift Playground中使用SceneKit(Using SceneKit in Swift Playground)
    问题 我到处都在寻找这个,但是我还是一片空白。 您如何复制Chris Lattner在WWDC的Playgrounds和SceneKit上演示的内容? 我想在Playgrounds中制作一个SceneKit动画场景。 我尝试从SceneKit项目模板剪切并粘贴设置代码,以为它可以神奇地开始渲染,但事实并非如此。 我尝试观看主题演讲,暂停并放大Lattner的屏幕以查找源代码的提示,但他似乎正在从项目的其他位置导入所有代码,因此没有任何线索。 文档中似乎没有任何内容,或者我丢失了它。 回答1 由于Swift在版本之间不具有源兼容性,因此此答案中的代码可能在Swift的将来版本或早期版本中均不起作用。 目前已更新为可在带有Swift 2.0的Xcode 7.0 Playgrounds中使用。 XCPlayground框架正是您所需要的,并在此处进行了说明。 这是一个非常简单的场景,可让您开始使用Swift中的Scene Kit: import SceneKit import QuartzCore // for the basic animation import XCPlayground // for the live preview import PlaygroundSupport // create a scene view with an empty scene var
  • 在 Playground 中导入框架时出错(Error importing framework in Playground)
    问题 我正在按照将自定义框架导入 Playground 的说明进行操作,但我仍然不断收到“没有这样的模块”错误。我尝试在工作区中添加所有内容;一个只有框架目标的项目,带有框架的 Cocoa 应用程序项目,以及只是框架。我还尝试在导入框架的应用程序中创建一个操场,我什至可以将它导入到其他 swift 文件中而没有任何问题;但我似乎无法在操场中导入它。 有人可以告诉我我可能做错了什么吗? 回答1 尝试使用模拟器构建您的框架目标! 我只使用不适用于游乐场的通用设备构建了我的设备! 回答2 你有没有让它工作? 我想通了我的问题。 我试图导入的代码不在框架目标中。 我不得不向我的 Cocoa Framework 类型的项目添加一个新目标。 然后将我的源文件包含在该框架中,最后构建该目标。 然后它起作用了。 回答3 我已经为此花费了 4 个多小时。 但我已经为 XCode 10 解决了这个问题。 如果 Playground 所在的 Workspace 没有针对它的目标,则您无法将任何框架添加到 Playground 中。 所以当你使用下载的框架时(我也是)——你注定要失败。 可以在这里找到可行的手册(上帝保佑这个人):https://medium.com/@pardel/using-3rd-party-frameworks-in-xcode-10-playgrounds
  • 在快速操场上导入吊舱时“没有这样的模块”(“no such module” when Importing pods in swift playground)
    问题 使用Xcode 7.2.1。 我正在按照本教程进行操作,以使Pod在操场上工作。 我已将游乐场添加到工作区中,并且podfile链接到游乐场。 但是导入仍然不起作用-“没有这样的模块” https://littlebitesofcocoa.com/138-using-cocoapods-in-xcode-playgrounds //导入无效 // Podfile target 'spaceships' do end platform :ios, '9.0' use_frameworks! link_with 'spaceships', 'imports', 'test' https://github.com/mingyeow/ImportToPlaygroundDoesNotWork 回答1 这不是您从本教程中获得的问题的直接答案,但是有一个新工具可以自动生成带有我经常使用的Pod的Playgrounds。 名为ThisCouldBeUsButYouPlaying ,源代码在GitHub上。 基本上,它扩展了CocoaPods安装程序,然后可以生成Playgrounds。 安装: $ gem install cocoapods-playgrounds 使用Alamofire创建游乐场: $ pod playgrounds Alamofire 创建具有多个吊舱的游乐场: $
  • Swift游乐场中的弱引用无法按预期工作(Weak references in Swift playground don't work as expected)
    问题 我一直在操场上跟踪中级Swift WWDC会话中的弱引用示例。 我对代码进行了如下修改: class Apartment { let address: Int init(address: Int) { self.address = address } weak var tenant: Person? } class Person { let name: String init(name: String){ self.name = name } weak var home: Apartment? func moveIn(apt: Apartment) { self.home = apt apt.tenant = self } } var renters = ["John Appleseed": Person(name: "John Appleseed")] var apts = [16: Apartment(address: 16)] renters["John Appleseed"]!.moveIn(apts[16]!) renters["John Appleseed"] = nil // memory should be released here // then apts[16].tenant should be nil if let tenantName = apts
  • How do you create an iOS liveView in Xcode 8/Swift 3 [duplicate]
    This question already has answers here: iOS Playground doesn't show UI preview (9 answers) Closed 4 years ago. I can't figure out how to create and display a live view in an Xcode 8/Swift 3 Playground. If Apple has comprehensive documentation on playgrounds and live views, I can't find it, and all my searching online reveals either tutorials on Xcode 7 or the new iPad playgrounds. The few examples I have found set up Mac OS views, which is not what I want (I work mostly in iOS, so the code I want to test out is iOS code, dealing with iOS view hierarchies.) Can somebody give me the bare minimum
  • Swift Playground 中没有这样的模块“Cocoa”(No such module 'Cocoa' in Swift Playground)
    问题 我正在尝试遵循 WWDC 游乐场会话中使用的一些代码,我正在尝试使用以下内容导入 Cocoa 框架: import Cocoa 但是我在助理编辑器中收到以下错误 Playground execution failed: error: <REPL>:3:8: error: no such module 'Cocoa' 如果这有帮助的话,我在视频中的 41:20。 回答1 您使用的是 iOS 游乐场(基于 UIKit),而不是 OS X 游乐场(基于 Cocoa)。 尝试创建一个新的 Playground 并选择“OS X”作为类型而不是“iOS”。 之后它应该可以正常工作。 您还可以在 Playground Settings→Platform 下的 File Inspector(View→Inspectors→Show File Inspector)中更改现有 Playground 的类型。 默认情况下,新的 iOS 游乐场是使用样板创建的,包括import UIKit ; OS X Playgrounds 是用样板创建的,包括import Cocoa ,所以如果你发现自己手动输入“ import Cocoa ”,这可能是你输入错误类型的线索。 回答2 如果在正确设置 Playground 的情况下仍遇到此或类似类型的错误,请尝试以下操作: 关闭 XCode 并从终端运行:
  • Swift playgrounds with UIImage
    I am working with Xcode 6, and I'm trying to recreate the code demoed during session 401 "What's new in Xcode 6". I've added an image to Images.xcassets (called Sample) and within the playground file I'm trying to access this image, as demoed. My code is as follows (like the demo): var sample = UIImage(named: "Sample") However, I can't get it to work like the demo. Am I missing something?
  • Swift Playgrounds: Replacement for captureValue(_:withIdentifier:)
    Xcode 7.3 has deprecated XCPlaygroundPage.currentPage.captureValue(_:withIdentifier:). Its predecessor, XCPCaptureValue(), was deprecated in Xcode 7.1. I'm wondering if there is any replacement, apart from implicit capture of collections and in loops? Apart from being more flexible using the explicit approach, the ability to add captions to graphs seems to be gone with the deprecation/removal (although the symbols are found, the aforementioned deprecated methods don't do anything, or at least not what you'd expect).