自定义类型的 ChildNode 在 Swift Playground 上返回 Nil

Posted

技术标签:

【中文标题】自定义类型的 ChildNode 在 Swift Playground 上返回 Nil【英文标题】:ChildNode of custom type is returning Nil on Swift Playground 【发布时间】:2017-04-01 09:56:37 【问题描述】:

我有一个名为 (Player.swift) 的课程。然后在我的(Scene.swift)类中,我像这样声明了我的对象。

var player: Player?

然后在我的initializeGame函数中,我是这样做的

private func initializeGame() 

    player = childNode(withName: "Player") as? Player!;
    //print NIL
    print(player?.name);
    // initializePlayer()is declared in Player.swift
    player?.initializePlayer();
    print(player?.name);
    //Print NIL
    scoreLabel = childNode(withName: "ScoreLabel") as? SKLabelNode!;
    scoreLabel?.text = "0";

我在 Xcode 中创建了我的 ios 项目,它工作正常,然后我创建了一个 Playground 项目并导入该项目中的所有 xcode 文件,我的 Playground 运行正常,但播放器无法正常运行。问题在于将播放器节点与 .sks 文件中的自定义类相关联。我的 Xcode 项目的名称是“Game play”,所以我在模块中编写 Game Play,在自定义类中编写 Player,并在 Playground 中使用相同的 sks 文件导致问题,我的游乐场项目的名称是“MyPlayground”,所以模块名称应该与项目名称相同,所以我将模块字段编辑到 Myplayground,仍然无法正常工作。所以请指导我如何正确更改它。

【问题讨论】:

【参考方案1】:

childNode(withName:) 方法返回一个已添加到节点层次结构中的现有子节点。如果没有找到具有该名称的节点,则返回 nil

您有添加名为“Player”的节点的代码吗?它是Player 类型的节点吗?它被调用了吗?

【讨论】:

请检查编辑。问题在于将播放器节点与 .sks 文件中的自定义类相关联。 Swift(和 Objective C 相关)区分大小写,因此请确保模块名称与您在 .swift 文件中使用的导入完全匹配。 我之前没有玩过 .sks 文件,但让我看看能否整理一个快速演示来复制您的问题。 github.com/niqbal/playgroundtest 这是我的 github repo 的链接,你可以从那里下载项目 myplayground.playground 文件。【参考方案2】:

1-打开您的 (.sks) 文件

2-选择播放器节点。

3-选择显示自定义类检查器。

4- 编写“MyPlayground_Sources”,而不仅仅是 MyPlayground。

【讨论】:

以上是关于自定义类型的 ChildNode 在 Swift Playground 上返回 Nil的主要内容,如果未能解决你的问题,请参考以下文章

Swift编程语言中如何实现自定义类型的for-in循环(基于Swift 2.2)

将数组内容(自定义类型)写入 plist 作为 swift 中的键控数组

Swift Playground - 实例成员不能用于类型自定义类

在 Swift/Objective-c 中按媒体类型自定义图像选择器

swift 自定义类型

具有自定义类类型的 Swift CoreData 保存属性