SwiftはObj-Cクラスのメソッドを認識しません

mickm

私はSwift3で作業しており、Swift 2.3 Xcode7でビルドおよび実行される同様のアプリの一部を使用しています。同じ機能のいくつかを備えた新しいアプリを開発しています。この一部は外部ライブラリにあります。

2.3プロジェクトには、次のファイルがあります。

#import <Foundation/Foundation.h>
#import <UIKit/UIImage.h>

@interface MMOCR : NSObject {

}

-(NSString*) doOCRAtImage:(UIImage*)scannedImage;

@end

そのファイルはブリッジヘッダーファイルに含まれ、コンパイルされて実行されます。これはコードです:

 let mmocr = MMOCR()
 result = mmocr.doOCRAtImage(croppedImage)

しかし、私の新しいプロジェクトでは、これを取得しています:

「doOCRAtImage」は「do(at :)」に名前が変更されました

したがって、クラスは認識しますが、メソッドは認識しません。これは2.3から3への変更ですか?古いプロジェクトをまだ変換してコンパイルしていないので、これが3とXcode8でコンパイルされるかどうかはわかりません。

ロブ

それはあなたのメソッドを認識しますが、Swift3の新しい命名規則を適用しています。あなたはこのObjective-Cのメソッドを呼び出すときに、あなたは単にそのエラーメッセージのガイダンスに従うとして、それを呼び出すようにしたいですdo(at:)

result = mmocr.do(at: croppedImage)

詳細については、Objective-CのAPIの中へスウィフトのより良い翻訳:SE-0005またはWWDC 2016のビデオ・スウィフトAPIの設計ガイドラインを


ところで、あなたは編集することができた場合@interface(つまり場合はMMOCR独自のクラスだった)、あなたはスウィフトの名前でを上書きすることができますNS_SWIFT_NAME

- (NSString*) doOCRAtImage:(UIImage *)scannedImage NS_SWIFT_NAME(doOCR(at:));

次に、次のことを行います。

let result = mmocr.doOCR(at: croppedImage)

個人的には、もしMMOCRあなた自身のクラスだったらdoOCRAtImage:、おそらく次のような名前に完全に名前を変更たくなるかもしれません

- (NSString*) recognizeTextInImage:(UIImage *)scannedImage;

その場合、Swift3のコードは次のようになります。

result = mmocr.recognizeText(in: croppedImage)

これは、単に使用するよりも劇的な変化であるNS_SWIFT_NAMEが、それは、両方のObjective-Cとスウィフト3でより直感的なコードを生成することがあります。


これは場合はMMOCR、あなたが簡単に変更できないこと、サードパーティのライブラリである、あなたは常に例えば、この方法に代わる、より論理的な名前を提供するために、独自の拡張機能を定義することができます。

extension MMOCR {
    func recognizeText(in image: UIImage) -> String {
        return self.do(at: image)
    }
}

次に、次のことができます。

result = mmocr.recognizeText(in: croppedImage)

もちろん、好きな名前を自由に選んでください。しかし、このようにして、不可解なdo(at:)構文ではなく、コード全体でこのより論理的な名前を使用できます。

個人的には、このMMOCRクラスのプロバイダーに拡張リクエストを送信して、より論理的なSwift 3インターフェイスを提供するように依頼します(NS_SWIFT_NAMEメソッドを使用するか、メソッドの名前を変更することにより)が、拡張機能はAPIとのエレガントなインターフェイスを提供する方法です。彼らがこれを彼ら自身で再訪するような時まで。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Objective-cはSwiftクラスのメソッドを認識しません

分類Dev

PhpStormはクラスのPDOメソッドを認識しません

分類Dev

C ++メソッド定義はクラスタイプを認識していません

分類Dev

クラスメンバーメソッドを呼び出すC ++ std :: asyncは変数の変更を認識しません

分類Dev

ファイルクラスはExistsまたはCreateTextメソッドを認識しません

分類Dev

OCMockバージョン3はクラスメソッドを認識しません

分類Dev

Djangoはシリアライザーのカスタム更新メソッドを認識しません

分類Dev

AndroidStudio:「onCreateViewHolder」メソッドは、そのクラスの中から、私の「.xmlの」レイアウトファイルを認識しません

分類Dev

IDEは、サブクラスの関数シグネチャが基本メソッドと一致することを認識しません

分類Dev

エラー:LINQ toEntitiesはメソッドDataLengthを認識しません

分類Dev

C#LINQ to Entitiesは、メソッド「ブール値」を認識しません

分類Dev

LINQ toEntitiesはメソッドを認識しません

分類Dev

RubyMineはʻit_behaves_like`メソッドを認識しません

分類Dev

LINQ toEntitiesはメソッド 'BooleanToBooleanを認識しません

分類Dev

LINQ to Entitiesはメソッドを認識しません:LastOrDefault

分類Dev

IDEはメソッドを認識しません

分類Dev

Eclipseはjarメソッドを認識しません

分類Dev

LINQ toEntitiesはメソッドNotSupportedExceptionを認識しません

分類Dev

LINQ toEntitiesはメソッドBooleanContainsAnyを認識しません

分類Dev

非同期メソッドはyieldreturnメソッドを認識しませんか?

分類Dev

RxSwiftはサブスクライブメソッドを認識できません

分類Dev

PhpStormは私のオブジェクトのメソッドを認識しません

分類Dev

PhpStormは私のオブジェクトのメソッドを認識しません

分類Dev

コンパイラは、オーバーライドされたメソッドのロンボクゲッターを認識しません

分類Dev

Javaは、サブクラスを宣言していることを認識できず、メンバーメソッドが見つかりません

分類Dev

LINQ to Entitiesは、選択セクション内のメソッドを認識しません

分類Dev

Eclipseはターゲット/生成されたソースからのクラスを認識しません

分類Dev

Factorybotは属性を認識しません—「メソッドがありません」エラー

分類Dev

C ++コンパイラ(cl)は、同じ子メソッド名を持つ親仮想メソッドを認識しません

Related 関連記事

  1. 1

    Objective-cはSwiftクラスのメソッドを認識しません

  2. 2

    PhpStormはクラスのPDOメソッドを認識しません

  3. 3

    C ++メソッド定義はクラスタイプを認識していません

  4. 4

    クラスメンバーメソッドを呼び出すC ++ std :: asyncは変数の変更を認識しません

  5. 5

    ファイルクラスはExistsまたはCreateTextメソッドを認識しません

  6. 6

    OCMockバージョン3はクラスメソッドを認識しません

  7. 7

    Djangoはシリアライザーのカスタム更新メソッドを認識しません

  8. 8

    AndroidStudio:「onCreateViewHolder」メソッドは、そのクラスの中から、私の「.xmlの」レイアウトファイルを認識しません

  9. 9

    IDEは、サブクラスの関数シグネチャが基本メソッドと一致することを認識しません

  10. 10

    エラー:LINQ toEntitiesはメソッドDataLengthを認識しません

  11. 11

    C#LINQ to Entitiesは、メソッド「ブール値」を認識しません

  12. 12

    LINQ toEntitiesはメソッドを認識しません

  13. 13

    RubyMineはʻit_behaves_like`メソッドを認識しません

  14. 14

    LINQ toEntitiesはメソッド 'BooleanToBooleanを認識しません

  15. 15

    LINQ to Entitiesはメソッドを認識しません:LastOrDefault

  16. 16

    IDEはメソッドを認識しません

  17. 17

    Eclipseはjarメソッドを認識しません

  18. 18

    LINQ toEntitiesはメソッドNotSupportedExceptionを認識しません

  19. 19

    LINQ toEntitiesはメソッドBooleanContainsAnyを認識しません

  20. 20

    非同期メソッドはyieldreturnメソッドを認識しませんか?

  21. 21

    RxSwiftはサブスクライブメソッドを認識できません

  22. 22

    PhpStormは私のオブジェクトのメソッドを認識しません

  23. 23

    PhpStormは私のオブジェクトのメソッドを認識しません

  24. 24

    コンパイラは、オーバーライドされたメソッドのロンボクゲッターを認識しません

  25. 25

    Javaは、サブクラスを宣言していることを認識できず、メンバーメソッドが見つかりません

  26. 26

    LINQ to Entitiesは、選択セクション内のメソッドを認識しません

  27. 27

    Eclipseはターゲット/生成されたソースからのクラスを認識しません

  28. 28

    Factorybotは属性を認識しません—「メソッドがありません」エラー

  29. 29

    C ++コンパイラ(cl)は、同じ子メソッド名を持つ親仮想メソッドを認識しません

ホットタグ

アーカイブ