Ios 苹果DemoBots项目在Swift5登录页面停止

Ios 苹果DemoBots项目在Swift5登录页面停止,ios,swift,xcode,Ios,Swift,Xcode,我正在尝试使用Swift 5运行苹果的示例DemoBots()项目,但该应用程序并没有加载到徽标启动页面 我已经更新了项目中所有Swift3不推荐的方法/属性,例如在SceneMetadata类中将过时的hashValue属性更改为哈希(转换为hasher:inout hasher),将isAsynchronous添加到SceneOperation类中,等等 如果有人在使用Swift5运行DemoBots时遇到类似问题,请告诉我您是如何解决的 这是我的场景操作代码: class SceneOpe

我正在尝试使用Swift 5运行苹果的示例DemoBots()项目,但该应用程序并没有加载到徽标启动页面

我已经更新了项目中所有Swift3不推荐的方法/属性,例如在SceneMetadata类中将过时的hashValue属性更改为哈希(转换为hasher:inout hasher),将isAsynchronous添加到SceneOperation类中,等等

如果有人在使用Swift5运行DemoBots时遇到类似问题,请告诉我您是如何解决的

这是我的场景操作代码:

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版本: