2017-09-29 7 views
0

swiftクラスで宣言されたObjective-CクラスのPublic変数にアクセスしようとしています。しかし、私は "不明なメソッド"エラーを取得しています。Objective-CクラスのSwiftクラスのパブリック変数へのアクセスXcode 9

NSLog(@"job on quick blox : %@",[QuickBloxJobClass jobOnQB]); 

、それはコンパイルエラーを示しています:ここで変数にアクセスするための私のコードがある

No known class method for selector 'jobOnQB'

そして、ここではQuickBloxJobClassの私のコードは次のとおりです。

@objc public class QuickBloxJobClass: NSObject 
{ 
    static var jobOnQB: QBCOCustomObject = QBCOCustomObject() 
} 

私はそれパブリック変数にすることはできませんので、私はQuickBloxJobClassにクラスメソッドを持っています。でも、私はQuickBloxJobClassの変数を作成してみました。しかし、変数にはまだアクセスできませんでした。 Xcodeで正常に動作していました。

解決策を提案してください。

答えて

1

私はjobOnQBは、公開することはできませんなぜ、class方法の存在は、それは公共のものを妨害してはならないわからないんだけど、それはいくつかの理由で、公開することはできません場合は、変数を取得するためにQuickBloxJobClassに静的メソッドを追加することができます。

ところで、[QuickBloxJobClass jobOnQB]は、QuickBloxJobClassというクラスの静的メソッドjobOnQBを呼び出すためのものです(ただし動作​​します)。しかし、厳密に言えば、jobOnQBはプロパティなので、より良いObjective-C構文はQuickBloxJobClass.jobOnQBになります。

また、@objcの推論はSwift 4では廃止予定ですので、Swiftから呼び出し可能なSwiftメソッドとプロパティを明示的にマークすることをお勧めします。@objc実際には、Swift 3 @objc inferenceOffに設定されている場合は、これを実行する必要があります。

更新:これはさらに調査する必要がありますが、これは設定の一部である可能性があります。最初にObjective-Cとして設定されたプロジェクトにSwiftコードを追加すると記述した動作が得られますが、Swiftで定義された内部メンバはObjective-Cですぐにアクセスできます。ファイルは後で追加されます。 Swift 3 @objc推論が無効になっている場合でも、そのメンバーには@objcとマークする必要があります。

更新2:このアクセスの問題は、Objective-Cで最初に設定されたプロジェクトで、ブリッジヘッダーを追加することで解決できます。ブリッジングヘッダーの目的が逆であっても、内部SwiftメンバーがObjective-Cで表示されるようになりました。Objective-CをSwiftで表示できるようにします。

+0

ありがとう@OmniProg。出来た。 –

+0

私はiOS 11に関する別の質問があります。質問を投稿しました。https://stackoverflow.com/questions/46468044/storyboard-issue-in-xcode-9-text-overlapping-each-other ...私を助けてくれますかこれ? –

+0

申し訳ありませんが、Sushil、何が起こっているのか分かりません.GUIの専門家ではありません。 :(しかし、私はこの質問を更新しました。上記を参照してください。 – OmniProg

関連する問題