当前位置: 首页 > 面试题库 >

非标称类型X不支持显式初始化

劳法
2023-03-14
问题内容

我试图快速了解仿制药在做什么。

我创建了这个样本游乐场

import UIKit

public protocol MainControllerToModelInterface : class {
    func addGoal()
    init()
}

public protocol MainViewControllerInterface : class {
    associatedtype MODELVIEW
    var modelView: MODELVIEW? {get set}

    init(modelView: MODELVIEW)
}

public class MainViewController<M> : UIViewController, MainViewControllerInterface where M : MainControllerToModelInterface {
    public weak var modelView: M?

    required public init(modelView: M) {
        self.modelView = modelView
        super.init(nibName: String(describing: MainViewController.self), bundle: Bundle.main)
    }

    required public init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

public class Other<C, M> : NSObject where C : MainViewControllerInterface, C : UIViewController, M : MainControllerToModelInterface, C.MODELVIEW == M {
    var c : C?

    override init() {
        let m = M()
        self.c = C(modelView: m)
        super.init()
    }
}

该行self.c = C(modelView: m)给我这个错误non-nominal type 'C' does not support explicit initialization

从另一个堆栈溢出问题中,我看到较早的Xcode版本中的此错误意味着

cannot invoke initializer for type '%type' with an argument list of type '...' expected an argument list of type '...'

但是在上面的操场上,缺少什么编译器?

我在swift4 / xcode9上。

更新资料

遵循建议后Use C.init(modelView: m) rather than C(modelView: m),错误发生变化:

No 'C.Type.init' candidates produce the expected contextual result type '_?'

比@ vini-
app建议删除UIViewController以使其工作。我仍然不明白为什么UIViewController在那里时编译器不满意。仅仅知道C具有有效的init方法还不够吗?


问题答案:

您只需要init在初始化通用参数而不是“真实”类型时显式使用:

self.c = C.init(modelView: m)


 类似资料:
  • 我以前有ElasticSearch 5.2,刚刚升级到6.0。 我试图创建一个索引模板以下指南在这里,但得到了错误 我的问题是

  • 条款六:auto推导若非己愿,使用显式类型初始化惯用法 在Item5中解释了比起显式指定类型使用auto声明变量有若干技术优势,但是有时当你想向左转auto却向右转。举个例子,假如我有一个函数,参数为Widget,返回一个std::vector<bool>,这里的bool表示Widget是否提供一个独有的特性。 std::vector<bool> features(const Widget& w)

  • 条款5解释了使用auto关键字去声明变量,这样就比直接显示声明类型提供了一系列的技术优势,但是有时候auto的类型推导会和你想的南辕北辙。举一个例子,假设我有一个函数接受一个Widget返回一个std::vector<bool>,其中每个bool表征Widget是否接受一个特定的特性: std::vector<bool> features(const Widget& w); 进一步的,假设第五个

  • @PostMapping public UserResponse createUser(@RequestBody UserRequest userDetail){ 这是我收到的错误代码 } 我尝试了很多不同的方法仍然没有得到解决方案这是来自邮递员的图片来自邮递员的图片

  • 问题内容: 当尝试扩展非传统的“类型”(如或)时,我看到此错误: 非标称类型“任何”均不能扩展 那么,什么使类型非标称呢?什么是一个非标称型等之间的差异或和常规标称型样? 问题答案: 这有点猜测(编辑:这是错误的,请看),但是这里是: 是协议,而不是实际类型。“标称”一词意味着命名(基于词的词根)。 所以您不能扩展,因为它是一个协议,而不是实际的类型,并且您不能扩展,因为它只是一个元组文字,也不是

  • 我正在使用一种称为点(x:双精度,y:双精度)的数据类型。我正在尝试使用_c1列和_c2作为Point()的输入,然后创建一个新的Point值列,如下所示 然后我调用函数: 但是,当我声明udf时,我得到了以下错误: 我已经正确导入了此数据类型,并且之前多次使用它。现在我尝试将其包含在我的udf的架构中,它无法识别它。包含标准Int,字符串,数组等以外的类型的方法是什么? 我在亚马逊EMR上使用火