ios - Swift:SKNode 应该有可选类型,可选成员没有成员

标签 ios iphone xcode swift ios8

在我更新到新的 XCode 之前,我有一个正在运行和编译的 Swift 游戏,突然出现了很多错误。这是我无法修复的两个。

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# 术语来说这是什么?

最佳答案

假设 node.scenenever nil,并且 node.parent从不 :

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 .

关于ios - Swift:SKNode 应该有可选类型,可选成员没有成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26236621/

相关文章:

objective-c - 在 Facebook 上张贴照片

iphone - subview 中的触摸检测

ios - 查找 CLLocationCoordinate2D 点之间的距离

objective-c - Aaron Hillegass Cocoa Programming for Mac OS X 第 9 章问题

ios - sortedArrayUsingComparator 不适用于 IOS 中的数组?

ios - 如何确定当前在 SwiftUI 中是否选择了 View

ios - 如何在 Swift 3 应用程序中裁剪 iPhone 图像

iphone - 以编程方式触发 didEndOnExit

ios - 未找到 FBSDKShareKit/FBSDKShareKit.h 文件

ios - 如何检测iPhone/iPhone模拟器请求的URL