加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Xcode 8.1 Swift 3错误:无法将’String’类型的值转换为预期的

发布时间:2020-12-14 18:04:31 所属栏目:百科 来源:网络整理
导读:包含var sceneData代码的行给出了一个错误,显然是因为“path”字符串.有谁知道如何解决这个问题?谢谢! extension SKNode { class func unarchiveFromFile(_ file : String) - SKNode? { if let path = Bundle.main.path(forResource: file,ofType: "sks")
包含var sceneData代码的行给出了一个错误,显然是因为“path”字符串.有谁知道如何解决这个问题?谢谢!

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
        }
    }
}

解决方法

数据(bytesNoCopy:期望指针而不是字符串路径.

从磁盘读取数据的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? { ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读