【问题标题】:return new ViewController in Swift在 Swift 中返回新的 ViewController
【发布时间】:2015-09-16 03:26:05
【问题描述】:

这是对此的后续问题:Assign ViewController to Class or vice versa

所以我有一个名为 SwipeStepViewController 的 ViewController,它是 ORKActiveStepViewController 的子类。在 SwipeStep 类中,我尝试用我的自定义 SwipeStepViewController 覆盖默认 ViewController。

我试图覆盖+stepViewControllerClass 方法并在 SwipeStep 类中返回我的自定义 Viewcontroller: 导入 ResearchKit

class SwipeStep:ORKActiveStep{

    override func stepViewControllerClass(){
        return SwipeStepViewController.self
    }

}

但这根本不起作用。 我使用研究工具包,但我想这是一个普遍的 swift 问题。

【问题讨论】:

标签: swift researchkit


【解决方案1】:

我对ResearchKit没有任何经验,但是在看了Objective-C code之后我相信你的方法应该是:

override class func stepViewControllerClass() -> AnyClass {
    return SwipeStepViewController.self
}

解释您收到错误的原因:

方法不会覆盖其超类中的任何方法。

和

'SwipeStepViewController.Type' 不能转换为 '()'

看看你应该覆盖的 class 方法(由 + 表示):

+ (Class)stepViewControllerClass {
    return [ORKFormStepViewController class];
}

将此与您的方法进行比较:

override func stepViewControllerClass(){
    return SwipeStepViewController.self
}

它既不是类方法,也不是返回类,并且很清楚错误来自哪里。

【讨论】:

  • 只是一个小提示:我必须删除第一个代码块中的“class”关键字。我猜,因为它是一个协议?
【解决方案2】:

晚会很晚,但我相信你的功能应该如下:

class SwipeStep : ORKActiveStep {
    static func stepViewControllerClass() -> SwipeStepViewController.Type {
        return SwipeStepViewController.self
    }
}

【讨论】:

    【解决方案3】:

    该函数应该返回一个类。查看 Swift 参考中关于 Metatype Types 的部分:

    https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html

    你的功能应该是

    override func stepViewControllerClass(){
        return SwipeStepViewController.self
    }
    

    【讨论】:

    • 我得到 2 个错误:方法没有覆盖其超类中的任何方法,并且 'SwipeStepViewController.Type' 不能转换为 '()'
    • 你导入 ResearchKit.Private 了吗?
    猜你喜欢
    • 2017-11-16
    • 2015-04-29
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多