Ios “如何修复”;表达式类型不明确,没有更多上下文”;在Xcode中

Ios “如何修复”;表达式类型不明确,没有更多上下文”;在Xcode中,ios,xcode,swift,debugging,sprite-kit,Ios,Xcode,Swift,Debugging,Sprite Kit,我在斯威夫特有一个精灵套装游戏。 在我更新Xcode并打开我的项目之后,我注意到一些更改和对预编码语法的一个错误,它说:“表达式的类型在没有更多上下文的情况下是不明确的”,这在以前是不存在的。 我在下面用错误标记代码。Xcode还表示.DataReadingMappedIfSafe有问题。 你知道怎么修吗? 提前谢谢你 import UIKit import SpriteKit extension SKNode { class func unarchiveFromFile(file : S

我在斯威夫特有一个精灵套装游戏。 在我更新Xcode并打开我的项目之后,我注意到一些更改和对预编码语法的一个错误,它说:“表达式的类型在没有更多上下文的情况下是不明确的”,这在以前是不存在的。 我在下面用错误标记代码。Xcode还表示
.DataReadingMappedIfSafe
有问题。 你知道怎么修吗? 提前谢谢你

import UIKit
import SpriteKit

extension SKNode {
  class func unarchiveFromFile(file : String) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {

      // Error occurs on the following line:
      var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!

      var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
      archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
      let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
      archiver.finishDecoding()
      return scene
    } else {
      return nil
    }
  }
}

您需要使用Swift 2中的
try
,请参阅Swift 2 iBook。Swift 2.0声明是:
convency init(contentsOfFile path:String,encoding enc:UInt)throws
,注意
throws
代替了error参数

错误处理

错误处理是响应程序中的错误条件并从中恢复的过程。Swift为运行时抛出、捕获、传播和操纵可恢复错误提供了一流的支持。”

您可以从《将Swift与Cocoa和Objective-C(Swift 2.1)结合使用》一书中了解有关Swift错误处理的更多信息


但在任何情况下,忽略错误都不是最佳做法。

您需要使用Swift 2中的
try
,请参阅Swift 2 iBook。Swift 2.0声明是:
便利init(contentsOfFile path:String,encoding enc:UInt)throws
,请注意
throws
代替错误参数

错误处理

错误处理是响应程序中的错误条件并从中恢复的过程。Swift为运行时抛出、捕获、传播和操纵可恢复错误提供了一流的支持。”

您可以从《将Swift与Cocoa和Objective-C(Swift 2.1)结合使用》一书中了解有关Swift错误处理的更多信息

但无论如何,忽略错误都不是最佳做法。

尝试以下方法:

class func unarchiveFromFile(file : String) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {

        var sceneData: NSData?
        // Error occurs on the following line:
        do {
            sceneData = try  NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe)
        } catch _ as NSError {

        }

        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData!)
        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
        archiver.finishDecoding()
        return scene
    } else {
        return nil
    }
}
试试这个:

class func unarchiveFromFile(file : String) -> SKNode? {
    if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {

        var sceneData: NSData?
        // Error occurs on the following line:
        do {
            sceneData = try  NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe)
        } catch _ as NSError {

        }

        var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData!)
        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
        archiver.finishDecoding()
        return scene
    } else {
        return nil
    }
}

如果您用导致错误的代码更新了您的问题,将会有所帮助。确定。我刚刚用代码更新了。如果你用导致错误的代码更新了你的问题,那会有所帮助。好的。我刚刚更新了密码。