2017-09-21 3 views
0

Swift 4の変換中にこの問題が発生し、Swift 4のエラーまたはバグであるかどうかわからない簡単なテストケースがあります。 「公共」の後の最初のプロパティとして@objc識別子、私はこれが@objc識別子で「期待宣言」エラーになります最初の@objc publicの後にSwift 4でエラーが発生する

import Foundation 

class ErrorClass: NSObject 
{ 
    public 

    @objc let myVal = 0 

    let myOtherVal = 1 


} 

コンパイルエラーを取得します。しかし、このような2つのプロパティの宣言を逆にすると、すべて正常に動作します。

import Foundation 

class ErrorClass: NSObject 
{ 
    public 

    let myOtherVal = 1 

    @objc let myVal = 0 



} 

私は公衆の範囲を誤解している可能性があります。迅速に、それは識別子の後の宣言にのみ適用されるのでしょうか、それともC++の後のすべてのスコープですか?前者の場合、2番目のケースで公衆の後に改行が改行されたとして私の問題を説明すると、myOtherValを公開識別子の影響を受けるようにします。

+0

「Swift」には新しいが、「public」とは何ですか?私はそれの後にいくつかの減速が必要だと確信しています! – Siyavash

+0

パブリックとレットの間に改行があると考えてください。だから、@ objcは一般の前にいるべきです。 –

+0

ええ、助けてくれてありがとう、それは公的な範囲がどのように働いたのかについての私の誤解でした。 –

答えて

1

これは、クラス内の最初の変数とは関係ありません。 @objcは、アクセス制御(public)の前に置く必要があります。私は前の行になぜあなたが一般公開しているのか分かりません。それは混乱しているように見えて、私はこれまでに見たことがありません。

class MyClass { 
    @objc public let myVar = 0 // compiles 
} 
+0

OP *は、(他の言語のように)*すべての*後のメンバーに 'public'が適用されるかもしれないと考えているかもしれません。 –

+0

私はそれに応じて自分の投稿を編集しましたが、質問するだけでそれを理解するのに役立つかもしれません。私は公共の範囲であるC++の方法でハングアップしました。明確化のためにありがとう。 –

+0

問題ありません。スウィフトでは、 'public'宣言は変数、関数、クラス、またはそれに先行するものにのみ適用されます。 – Connor

関連する問題