Ambiguous use of init in Swift 2.2

Stephen Newton

I'm getting an "ambiguous use of init" error when building with Xcode 7.3 and Swift 2.2

The issue is related to two Objective-C classes and how Swift views their initializers.

Objc sees:

Superclass

@interface Foo: NSManagedObject
+(instancetype)fooWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context;

Subclass

@interface Bar: Foo
+(instancetype)barWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context;

while Swift only sees:

init(owner: Owner!, insertIntoManagedObjectContext context: NSManagedObjectContext!)

which is causing the compiler to be unsure of which init is being called on the subclass "Bar". Is there a way to specify which initializer to use when initializing the subclass? I'd like to avoid refactoring the init method if possible.

an0

It is due to ObjC->Swift API translation rules.

You can use swift_name attribute to overwrite these rules.

@interface Foo: NSManagedObject
+(instancetype)fooWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context NS_SWIFT_NAME(foo(owner:moc:));

@interface Bar: Foo
+(instancetype)barWithOwner:(Owner *)owner insertIntoManagedObjectContext:(NSManagedObjectContext *)context NS_SWIFT_NAME(bar(owner:moc:));

Then you can call them separately in Swift code:

let foo = Bar.foo(owner: owner, moc: context)
let bar = Bar.bar(owner: owner, moc: context)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Swift 3 and Xcode8 - Ambiguous use of init

分類Dev

NSData init?(contentsOf url:URL)Swift2からSwift3への移行

分類Dev

How can I use swift 2 and swift 3 at the same time?

分類Dev

Ambiguous use of 'observeSingleEvent(of: with:)

分類Dev

Use of overloaded operator ambiguous

分類Dev

CLGeocoder Swift 2 Version

分類Dev

AVAudioRecorder swift 2

分類Dev

Swift 2 SpriteKit issues

分類Dev

Swift 2: "the error is not handled"

分類Dev

NSJSONSerialization with Swift 2

分類Dev

ambiguous use of selector dataTask(with: completionHandler:)

分類Dev

Swiftでコードを複製せずに同じ内容の2つのinitを実装する方法は?

分類Dev

init CBCentralManager: Type of expression is ambiguous without more context

分類Dev

Swift Codable init

分類Dev

SWIFT uiviewcontroller init

分類Dev

init problems with PTKView in Swift

分類Dev

Swift Error: ambiguous reference to member 'jsonObject(with:options:)

分類Dev

Converting to Swift 4, ambiguous subscript error

分類Dev

Swift2のwithUnsafePointer

分類Dev

Swift watchOS 2-CMSensorDataList

分類Dev

LAContextcanEvaluatePolicyとSwift2

分類Dev

Swift 2 Make Post Json

分類Dev

Swift 2 - Share video with UIActivityViewController

分類Dev

Stream 2 videos simultaneously Swift

分類Dev

Swift 2 count duplicate in array

分類Dev

Swift 2、Xcode 7.2'NSInternalInconsistencyException

分類Dev

swift - corebluetooth writing 2 bytes

分類Dev

Angular 2のangularのng-init代替

分類Dev

angular's ng-init alternative in Angular 2