swift - Xcode 6.3 和 Swift 1.2 中的新警告 : Cast from '[SKNode]' to unrelated type 'String' always fails

标签 swift casting sprite-kit plist xcode6.3

更新到 xCode 6.3/Swift 1.2 后,我遇到了一个我无法解决的错误:“从‘[SKNode]’转换为不相关的类型‘String’总是失败”。

下面是我的 GameScene 代码,它从解析 p-list 开始。

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate, NSXMLParserDelegate {

    var currentTMXFile:String?

    override func didMoveToView(view: SKView) {

        /* Parse p-list */

        let path = NSBundle.mainBundle().pathForResource("GameData", ofType: "plist")
        let dict = NSDictionary(contentsOfFile: path!)!
        let playerDict:AnyObject = dict.objectForKey("PlayerSettings")!
        let gameDict:AnyObject = dict.objectForKey("GameSettings")!
        let levelArray:AnyObject = dict.objectForKey("LevelSettings")!

        if let levelNSArray:NSArray = levelArray as? NSArray {

            var levelDict:AnyObject = levelNSArray[level]

            numberOfLevels = levelNSArray.count

            if let tmxFile = levelDict["TMXFile"] as? String {

                currentTMXFile = tmxFile

            }

        }

错误被抛出在...

if let tmxFile = levelDict["TMXFile"] as? String {...

并返回一个 nil 值,即使 p-list 中有一个字符串值并且在更新之前,它工作正常。我首先尝试转换为 AnyObject,这会引发更多错误。

最佳答案

这里:

var levelDict:AnyObject = levelNSArray[level]

您将 levelDict 声明为 AnyObject,但此处:

if let tmxFile = levelDict["TMXFile"] as? String {

你把它当作一本字典来使用——我想知道它怎么可能在以前版本的 Xcode 中工作...

但是,要修复它,请将该变量设为显式字典,或者是 cocoa 字典:

var levelDict = levelNSArray[level] as? NSDictionary

if let tmxFile = levelDict?.objectForKey("TMXFile") as? String {

或快速的:

var levelDict = levelNSArray[level] as? [String : AnyObject]

if let tmxFile = levelDict?["TMXFile"] as? String {

关于swift - Xcode 6.3 和 Swift 1.2 中的新警告 : Cast from '[SKNode]' to unrelated type 'String' always fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632762/

相关文章:

c# - AutoMapper:如何从 String 解析 Int 并可能根据数据类型创建规则?

c++ - 为什么运算符的操作数需要是同一类型?

sprite-kit - 为什么 Sprite 套件中的坐标系翻转了,我可以全局更改吗?

ios - UIActivityViewController completionWithItemsHandler 函数未在 MacOS 应用程序中调用

函数类型中的快速子类

ios UIImage 超出 UIImageView 边框

ios - iOS 应用的密码自动填充

c++ - 这个 Actor 分配了什么? C 风格类型转换

swift - 如何检测您的手指是否与蒙版 Sprite 接触

ios - 从 GameOverScene 返回后我的游戏崩溃了