模糊地使用'init'

时间:2018-03-24 21:53:28

标签: swift

我尝试用块(闭包)初始化我的类但是我得到了

  

模糊地使用'init'

enter image description here

所有的时间,我的课程在目标c中,我尝试在swift4中使用它

Objc init

typedef void (^updateCoordinate)(CLLocationCoordinate2D coordinate);

- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate Dragable:(BOOL)isDragable updateCoordinate:(updateCoordinate)updateCoordinate;

Swift init

let map = FAMapViewController.init(coordinate: CLLocationCoordinate2DMake(0, 0), dragable: true) { (coordinate) in  }

NS_SWIFT_NAME对我没有帮助,我也有同样的问题请给我。

3 个答案:

答案 0 :(得分:2)

Ambiguous use of 'init'表示您在Swift中进行的init调用的签名无法与目标类中的init匹配。

我看到这个错误是由呼叫网站中的简单错误引起的 - 就像大写不正确一样。例如,在您的Swift init调用中,您有一个小写的dragable: true,但在Objc初始化中,您有Dragable:(BOOL)

StackOverflow充满了大写不正确的例子,例如:

IOS: Ambiguous Use of init(CGImage)

SCNSceneSource init is giving Ambiguous use of 'init(URL:options:)' error

答案 1 :(得分:0)

我为我的问题找到了解决方案,我在Objective-C Class

中使用了与deferent参数相同的方法名称
- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate
     Dragable:(BOOL)isDragable 
    updateCoordinate:(updateCoordinate)updateCoordinate;

- (instancetype)initWithCoordinate:(CLLocationCoordinate2D)coordinate
 Dragable:(BOOL)isDragable;
  

刚刚使用NS_SWIFT_NAME来更改名称,而且工作正常

NS_SWIFT_NAME(init(withUpdateCoordinateAndCoordinate:isDragable:withUpdateCoordinate:));

NS_SWIFT_NAME(init(withCoordinate:isDragable:));

答案 2 :(得分:0)

在某些情况下,您需要在initclass中检查struct函数的DUPLICATE。此示例将显示错误Ambiguous use of 'init'

init(name: String = "") { 
    self.id = -1
    self.name = name
}

init(id: Int = -1, name: String = "") {
    self.id = id
    self.name = name
}