2017-09-21 17 views
0

我在Swift 4轉換期間遇到了這個問題,並且有一個簡單的測試用例,我不確定它是我的錯誤還是Swift 4中的錯誤。如果我有@objc標識符後「公」的第一個屬性,我得到一個編譯錯誤公開之後第一個@objc導致Swift 4中的錯誤

import Foundation 

class ErrorClass: NSObject 
{ 
    public 

    @objc let myVal = 0 

    let myOtherVal = 1 


} 

這將導致在@objc標識符「期望的聲明」的錯誤。但是,如果您顛倒這樣的兩個屬性的聲明,一切正常。

import Foundation 

class ErrorClass: NSObject 
{ 
    public 

    let myOtherVal = 1 

    @objc let myVal = 0 



} 

我可能誤解了公衆的範圍。在swift中,它是否僅適用於標識符之後的聲明,還是將範圍內的所有內容都包含在C++之後?如果前者,這將解釋我的問題作爲公開之後的換行符將在第二種情況下被忽略,使myOtherVal受到公共標識符的影響。

+0

即時通訊新的Swift,但什麼是「公共」?我相信你之後需要一些減速! – Siyavash

+0

認爲公衆和Let之間存在一條新線。所以@objc應該在公衆面前。 –

+0

是的,感謝您的幫助,這是我對公共範圍如何工作的誤解。 –

回答

1

它與班級中的第一個變量無關。 @objc只需要在訪問控制之前(public)。我不知道你爲什麼在前一行公開了公衆;這似乎令人困惑,我以前從未見過。

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

OP *可能認爲'public'適用於所有*後面的成員(如其他一些語言)。 –

+0

我做了,並相應地編輯了我的帖子,只是問這個問題可能幫助我弄清楚了。我被掛在公共範圍的C++方式上。感謝澄清。 –

+0

沒問題;是的,在Swift中,「公共」聲明只適用於變量,函數,類或其他任何先於它的地方。 – Connor

相關問題