字典更新值导致swift编译器分段错误
我的类有一个属性字典更新值导致swift编译器分段错误,swift,xcode6,Swift,Xcode6,我的类有一个属性 var activeSquares = Dictionary <String, SKShapeNode> () 如果我使用 activeSquares["someUniqueDescription"] = squareNode 但它在编译时会导致崩溃 1. While emitting IR SIL function @_TFC14gamename9GameScene11addedSquarefS0_FCS_6SquareT_ for 'addedSquare
var activeSquares = Dictionary <String, SKShapeNode> ()
如果我使用
activeSquares["someUniqueDescription"] = squareNode
但它在编译时会导致崩溃
1. While emitting IR SIL function @_TFC14gamename9GameScene11addedSquarefS0_FCS_6SquareT_ for 'addedSquare' at /.../gamename/gamename/GameScene.swift:30:5
<unknown>:0: error: unable to execute command: Segmentation fault: 11
<unknown>:0: error: swift frontend command failed due to signal (use -v to see invocation)
Command /Applications/Xcode6-Beta2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254
1。在/../gamename/gamename/GameScene.swift:30:5处为“addedSquare”发射IR SIL功能时
:0:错误:无法执行命令:分段错误:11
:0:错误:swift前端命令因信号而失败(使用-v查看调用)
命令/Applications/Xcode6-Beta2.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin/swift失败,退出代码254
如何正确使用updateValue向字典添加/更新键/值对?不确定我的解决方案是否适合这里,但它可能会有所帮助。似乎订阅NSDictionary有点奇怪。不确定原因,但定义如下:
func objectForKeyedSubscript(key: NSCopying!) -> AnyObject!
func setObject(obj: AnyObject!, forKeyedSubscript key: NSCopying!)
所以,如果我没记错的话,它会隐式地返回unwrapped optional,但应该返回optional,因为键可能没有值。如果你想写:
if(dictionary["key"] != nil)
如果编写以下代码,则会出现编译错误“AnyObject不能转换为UInt8”:
if(dictionary["key"])
你没有一个
我解决此问题的方法是使用可选的展开,因此:
if(someBool && dictionary["key"]) // fine in beta 2, crash in beta 3-4
// turned to:
var hasValueForKey = false
if dictionary["key"]
{
hasValueForKey = true
}
if(someBool && hasValueForKey) // fine in beta 4
以及:
我想可能有一些选项和东西可以通过下标设置对象,它的定义如下:
func objectForKeyedSubscript(key: NSCopying!) -> AnyObject!
func setObject(obj: AnyObject!, forKeyedSubscript key: NSCopying!)
也许在这里玩可选的解包也会有所帮助。我要尝试的第一件事是更新到Xcode6 Beta 3(因为编译器不应该出错)