【问题标题】:Xcode 8.1 Swift 3 Error: cannot convert value of type 'String' to expected argument type 'UnsafeMutableRawPointer'Xcode 8.1 Swift 3 错误:无法将“String”类型的值转换为预期的参数类型“UnsafeMutableRawPointer”
【发布时间】:2016-10-29 07:53:54
【问题描述】:

包含 var sceneData 代码的行给出了错误,显然是因为“路径”字符串。有谁知道如何解决这个问题?谢谢!

extension SKNode {
    class func unarchiveFromFile(_ file : String) -> SKNode? {
        if let path = Bundle.main.path(forResource: file, ofType: "sks") {
            var sceneData = Data(bytesNoCopy: path, count: .DataReadingMappedIfSafe, deallocator: 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 xcode


    【解决方案1】:

    Data(bytesNoCopy: 需要一个指针而不是字符串路径。

    从磁盘读取Data 的API 是Data(contentsOf,但是它需要一个URL

    extension SKNode {
      class func unarchiveFromFile(_ file : String) -> SKNode? {
        if let url = Bundle.main.url(forResource: file, withExtension: "sks") {
          do {
            var sceneData = try Data(contentsOf: url)
            var archiver = NSKeyedUnarchiver(forReadingWith: sceneData)
    
            archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
            let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
            archiver.finishDecoding()
            return scene
          } catch {
            return nil
          }
        } else {
          return nil
        }
      }
    }
    

    在 Swift 3 中,我将方法重命名为

    class func unarchive(from file : String) -> SKNode? { ...
    

    【讨论】:

    • 在 Swift 4 中,decodeObjectForKey 定义已更改为:let scene = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as!游戏场景
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多