2014-10-07 61 views
1

我有一個工作和編譯Swift遊戲,我更新到新的XCode之前,突然出現了很多錯誤。這裏有兩個我無法修復。Swift:SKNode應該有可選的類型,可選成員沒有成員

func centerOnNode(node: SKNode) { 

    let cameraPositionInScene = node.scene?.convertPoint(node.position, fromNode: node.parent!) 

    var y = CGFloat(node.parent?.position.y - cameraPositionInScene?.y!)    
    // ERROR: 
    // Operand of postfix ‘!’ should have optional types; Type is CGFLoat 

    let x = CGFloat(node.parent.position.x - cameraPositionInScene.x) 
    // ERROR: 
    // SKNode? does not have a member position 

    // push the camera a bit up 
    y -= 75 

    node.parent.position = CGPointMake(x, y) 

我想我真的不明白這一點!和?商業。包裝,解包,可選類型。這是Java還是C#術語?

回答

2

這將工作,假設node.scene從未nil,並node.parent從未nil

let cameraPositionInScene = node.scene!.convertPoint(node.position, fromNode: node.parent!) 

var y = CGFloat(node.parent!.position.y - cameraPositionInScene.y) 

let x = CGFloat(node.parent!.position.x - cameraPositionInScene.x) 

如果有可能的是nil,使用此代碼來代替:

if let cameraPositionInScene = node.scene?.convertPoint(node.position, fromNode: node.parent!) { 
    if let parent = node.parent { 
     var y = CGFloat(parent.position.y - cameraPositionInScene.y) 

     let x = CGFloat(parent.position.x - cameraPositionInScene.x) 

     // push the camera a bit up 
     y -= 75 

     parent.position = CGPointMake(x, y) 
    } 
} 

這將測試以確保沒有值是nil,並且如果他們(如第一個例子那樣)不做任何事情(而不是崩潰)。請參閱Apple's article

相關問題