Ios 苹果DemoBots项目在Swift5登录页面停止
我正在尝试使用Swift 5运行苹果的示例DemoBots()项目,但该应用程序并没有加载到徽标启动页面 我已经更新了项目中所有Swift3不推荐的方法/属性,例如在SceneMetadata类中将过时的hashValue属性更改为哈希(转换为hasher:inout hasher),将isAsynchronous添加到SceneOperation类中,等等 如果有人在使用Swift5运行DemoBots时遇到类似问题,请告诉我您是如何解决的 这是我的场景操作代码:Ios 苹果DemoBots项目在Swift5登录页面停止,ios,swift,xcode,Ios,Swift,Xcode,我正在尝试使用Swift 5运行苹果的示例DemoBots()项目,但该应用程序并没有加载到徽标启动页面 我已经更新了项目中所有Swift3不推荐的方法/属性,例如在SceneMetadata类中将过时的hashValue属性更改为哈希(转换为hasher:inout hasher),将isAsynchronous添加到SceneOperation类中,等等 如果有人在使用Swift5运行DemoBots时遇到类似问题,请告诉我您是如何解决的 这是我的场景操作代码: class SceneOpe
class SceneOperation: Operation {
// MARK: Types
/**
Using the `@objc` prefix exposes this enum to the ObjC runtime,
allowing the use of `dynamic` on the `state` property.
*/
@objc enum State: Int {
/// The `Operation` is ready to begin execution.
case ready
/// The `Operation` is executing.
case executing
/// The `Operation` has finished executing.
case finished
/// The `Operation` has been cancelled.
case cancelled
}
// MARK: Properties
/// Marking `state` as dynamic allows this property to be key-value observed.
@objc dynamic var state = State.ready
// MARK: NSOperation
override var isReady: Bool {
return state == .ready && super.isReady
}
override var isExecuting: Bool {
return state == .executing
}
override var isFinished: Bool {
return state == .finished
}
override var isCancelled: Bool {
return state == .cancelled
}
override var isAsynchronous: Bool {
return true
}
/**
Add the "state" key to the key value observable properties of `NSOperation`.
*/
dynamic class func keyPathsForValuesAffectingIsReady() -> Set<String> {
return ["state"]
}
dynamic class func keyPathsForValuesAffectingIsExecuting() -> Set<String> {
return ["state"]
}
dynamic class func keyPathsForValuesAffectingIsFinished() -> Set<String> {
return ["state"]
}
dynamic class func keyPathsForValuesAffectingIsCancelled() -> Set<String> {
return ["state"]
}
}
类场景操作:操作{
//标记:类型
/**
使用“@objc”前缀将此枚举公开给objc运行时,
允许在“state”属性上使用“dynamic”。
*/
@objc枚举状态:Int{
///“操作”已准备好开始执行。
案例准备
///正在执行“操作”。
案件执行
///“操作”已完成执行。
案件审理完毕
///“操作”已被取消。
案件取消
}
//马克:财产
///将“state”标记为dynamic允许观察此属性的键值。
@objc动态变量状态=state.ready
//标记:NSO操作
覆盖变量已就绪:Bool{
返回状态==.ready&&super.isReady
}
覆盖变量执行:Bool{
返回状态==。正在执行
}
覆盖变量isFinished:Bool{
返回状态==.finished
}
已取消覆盖变量:Bool{
返回状态==。已取消
}
覆盖变量:Bool{
返回真值
}
/**
将“state”键添加到“NSOperation”的键值可观察属性中。
*/
动态类func keypathsforvaluesafectingisready()->Set{
返回[“状态”]
}
动态类func keypathsforvaluesafectingisexecuting()->Set{
返回[“状态”]
}
动态类func keypathsforvaluesafectingisfinished()->Set{
返回[“状态”]
}
动态类func keypathsforvaluesafectingiscancelled()->Set{
返回[“状态”]
}
}
应用程序成功生成,没有运行时或编译时错误/警告。但它只在背景中显示DemoBots徽标和绿色粒子动画。没有任何菜单或关卡场景被渲染。最有可能的是,在将项目转换为最新版本的Swift时,您选择了禁用
@objc
界面。不幸的是,如果没有这一点,该项目将无法运作。您可以尝试在构建设置中打开Swift 3@objc推理
。
或者在这里,您可以使用支持Swift 5的DemoBot版本: