我尝试用块(闭包)初始化我的类但是我得到了
模糊地使用'init'
所有的时间,我的课程在目标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
对我没有帮助,我也有同样的问题请给我。
答案 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)
在某些情况下,您需要在init
或class
中检查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
}