无法将self(实现协议)传递给类实例化的init方法。(Swift)

巴尔加夫

我有这样的协议

public protocol FooProtocol {
    associatedType someType

    func doFoo(fooObject:someType) -> Void
}

我有一个实现此协议的类

public class Foo<T> : FooProtocol {
    private let _doFoo : (T) -> Void

    init<P : FooProtocol where P.someType == T>(_dep : P) {
        _doFoo = _dep.doFoo
    }

    public func doFoo(fooObject: T) {
        _doFoo(fooObject)
    }
}

到目前为止的一切对我来说都很好,现在在另一个类中,我用实现了FooProtocol someType = MyType,然后当我尝试通过传入Foo该类的init方法来初始化该类时T = MyType出现编译错误,这是我在做什么错?selfFoo

错误信息:

“无法使用类型为参数的列表调用init (_dep: NSObject -> () -> MyView)

public class MyView : UIViewController, FooProtocol {

    func doFoo(fooObject : MyType) {
        ...
    }

    // Here I want to initialize the Foo<T> class
    let fooInstant : Foo<MyType> = Foo.init(_dep : self)
    // I get the error message on the above line the error
    // message reads "Cannot invoke init with an argument list
    // of type `(_dep: NSObject -> () -> MyView)`
}

自身是否不符合FooProtocol的要求someType == MyType,并且由于我试图以此来初始化Foo对象,T == MyType因此从技术上讲应该可以吗?

哈米什

实际上,这似乎与您的泛型或协议一致性无关。只是您要selfself初始化之前尝试访问属性分配初始化过程中分配了默认属性值)。

因此,解决方案是使用如下所示的惰性属性:

lazy var fooInstant : Foo<MyType> = Foo(_dep : self)

现在,它将在首次访问时创建,因此需要self进行初始化。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我何时将类的实例作为self传递给方法?

将值传递给要在Swift中实例化该类时使用的类

将未实例化的类和接口传递给泛型方法

Python-将类实例化传递给函数

Ruby on Rails:将参数传递给类<< self下的方法

如何将Django模拟实例传递给类方法?

Python:将实例变量传递给类方法

Swift-如何将类型/对象(名称或实例)传递给方法,然后(a)获取类型(b)实例化它?

无法将ReleaseHandle中的SafeHandle实例传递给本机方法

我在实例化__init__时传递给类的参数/参数被忽略

当类实现接口时,为什么将ServletConfig obj传递给GenericServlet的init()?

将参数传递给实现IMappingAction的类

将具体实例传递给需要协议参数的闭包

无法将迭代器传递给C ++中的类方法

无法将DateTime传递给类方法-强制错误

如何将lambda函数传递给具有模板类的类的实例化

为什么类需要一个 __init__ 函数来将参数传递给类实例?

装饰和包装的函数没有将 self 传递给实例方法

将实现协议的Swift类导入Objective-C类

类中的所有方法,将所有未知函数传递给类中的实例

将self作为参数传递给方法

如何避免将参数传递给基于引用的帮助器类的模板实例化

将Swift协议传递给Objective-C指针

将Scala.js类实例传递给JavaScript,该JavaScript将调用函数调用方法

无法将模板类传递给cout

如何在实例化对象时传递 **kwargs 并在类的 __init__() 方法中访问它

将参数传递给 pig udf 无法使用参数实例化

从协议类型实例化类

无法将类实例分配给其协议类型?