Xcode 8.1 Swift 3 错误:无法将“String”类型的值转换为预期的参数类型“UnsafeMutableRawPointer”
Posted
技术标签:
【中文标题】Xcode 8.1 Swift 3 错误:无法将“String”类型的值转换为预期的参数类型“UnsafeMutableRawPointer”【英文标题】:Xcode 8.1 Swift 3 Error: cannot convert value of type 'String' to expected argument type '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
【问题讨论】:
【参考方案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!游戏场景以上是关于Xcode 8.1 Swift 3 错误:无法将“String”类型的值转换为预期的参数类型“UnsafeMutableRawPointer”的主要内容,如果未能解决你的问题,请参考以下文章
我编译 Swift 2.3 项目并在 Xcode 8.1 上有这个问题
导航不出现 Xcode 8.1 iOS 10 Swift 3
当我打开 .swift/.xib 文件时,XCode 8.1 崩溃
如何使约束适用于横向和纵向(xcode 8.1 / swift3 / storyboard)