Ios 在新的XCode 6中运行后,项目有144次致命故障
我使用XCode6 beta4通过obj-c和Swift开发我的项目。每次安装GM版本后Ios 在新的XCode 6中运行后,项目有144次致命故障,ios,swift,sprite-kit,xcode6,Ios,Swift,Sprite Kit,Xcode6,我使用XCode6 beta4通过obj-c和Swift开发我的项目。每次安装GM版本后 self.view.addSubview(startButton) 高亮显示,并且这些线也高亮显示 scene.view.paused self.scene.removeAllActions() self.view.bounds SpriteKit的课程是否改变了,是我的错还是通用汽车的错误 错误是SKView/SKScene没有成员****,但我检查了它,它有这些成员 这真的不是你的错。Swift团队
self.view.addSubview(startButton)
高亮显示,并且这些线也高亮显示
scene.view.paused
self.scene.removeAllActions()
self.view.bounds
SpriteKit的课程是否改变了,是我的错还是通用汽车的错误
错误是SKView/SKScene没有成员****,但我检查了它,它有这些成员
这真的不是你的错。Swift团队检查并清理了框架中选项的使用。在某些情况下,隐式展开的选项(用
!
声明)成为常规选项(用?
声明)
视图现在是用声明的可选视图,而不是用声明的隐式展开的可选视图代码>。您现在需要在使用该值时展开该值:
self.view?.bounds.size
真的不是你的错。Swift团队检查并清理了框架中选项的使用。在某些情况下,隐式展开的选项(用!
声明)成为常规选项(用?
声明)
视图现在是用声明的可选视图,而不是用声明的隐式展开的可选视图代码>。您现在需要在使用该值时展开该值:
self.view?.bounds.size
我知道我已经看到了几个有效的副本,但我现在还没有找到,所以这里有一个快速的答案
这与如何将API中的对象参数、返回值和属性从ObjC导入Swift有关。在Xcode 6测试版早期,所有对象参数/返回/属性都作为隐式展开选项导入;e、 g
// in SKScene:
var view: UIView!
// in SKNode:
var children: [AnyObject]!
使用隐式展开可选(IUO),您可以直接寻址view
(因此像self.view.bounds
这样的代码是合法的)。它可能不存在,在这种情况下你会崩溃。某些操作在IUO类型上不可能,而在它包含的类型上则可能。IUO的最佳实践是在处理其内容之前,使用诸如可选链接和可选绑定之类的构造检查它们是否为nil
ObjC to Swift导入器必须对指向ObjC对象的所有属性/参数/返回执行此操作,因为从语法上讲,任何指针都允许为nil
,即使在实践中永远不会是。测试nil
对于像SKNode.children
这样的API来说有点麻烦,因为它们从来都不是nil
(在没有children的情况下是一个空数组)
在过去的几个Beta和Xcode 6 GM中,苹果审核了几个框架,以便导入的对象指针可以是nil
(如UIViewController.view
)作为显式选项导入:
// SKScene
var view: UIView?
以及永远不会为nil
的对象指针作为非可选类型导入:
// SKNode
var children: [AnyObject]
这意味着您可以安全地引用node.children
,而无需担心崩溃,也无需检查它是否为nil
。但是既然scene.view
是显式可选的,您必须在使用它之前检查它是否为nil
根据场景的不同,您可以选择几种方法中的任意一种来测试或处理可选的:
- 强制展开:
self.view!。边界大小
- 可选链接:
self.view?.bounds.size
- 可选绑定:
如果让view=self.view{/*使用*/view.bounds.size}
- 链接和绑定:
如果让size=self.view?.bounds.size{/*使用*/size}
阅读Swift编程语言,了解每种语言的优缺点。我知道我已经看到了一些有效的副本,但我目前还没有找到,所以这里有一个快速的答案
这与如何将API中的对象参数、返回值和属性从ObjC导入Swift有关。在Xcode 6测试版早期,所有对象参数/返回/属性都作为隐式展开选项导入;e、 g
// in SKScene:
var view: UIView!
// in SKNode:
var children: [AnyObject]!
使用隐式展开可选(IUO),您可以直接寻址view
(因此像self.view.bounds
这样的代码是合法的)。它可能不存在,在这种情况下你会崩溃。某些操作在IUO类型上不可能,而在它包含的类型上则可能。IUO的最佳实践是在处理其内容之前,使用诸如可选链接和可选绑定之类的构造检查它们是否为nil
ObjC to Swift导入器必须对指向ObjC对象的所有属性/参数/返回执行此操作,因为从语法上讲,任何指针都允许为nil
,即使在实践中永远不会是。测试nil
对于像SKNode.children
这样的API来说有点麻烦,因为它们从来都不是nil
(在没有children的情况下是一个空数组)
在过去的几个Beta和Xcode 6 GM中,苹果审核了几个框架,以便导入的对象指针可以是nil
(如UIViewController.view
)作为显式选项导入:
// SKScene
var view: UIView?
以及永远不会为nil
的对象指针作为非可选类型导入:
// SKNode
var children: [AnyObject]
这意味着您可以安全地引用node.children
,而无需担心崩溃,也无需检查它是否为nil
。但是既然scene.view
是显式可选的,您必须在使用它之前检查它是否为nil
根据场景的不同,您可以选择几种方法中的任意一种来测试或处理可选的:
- 强制展开:
self.view!。边界大小
- 可选链接:
self.view?.bounds.size
- 可选绑定:
如果让view=self.view{/*使用*/view.bounds.size}
- 链接和绑定:
如果让size=self.view?.bounds.size{/*使用*/size}
在T中阅读