【问题标题】:First @objc after public causes an error in Swift 4public 之后的第一个@objc 在 Swift 4 中导致错误
【发布时间】:2017-09-21 17:06:07
【问题描述】:

我在 Swift 4 转换过程中遇到了这个问题,并且有一个简单的测试用例,我不确定这是我的错误还是 Swift 4 中的错误。如果我有一个 @objc 标识符作为“public”之后的第一个属性, 我得到一个编译错误

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



}

我可能误解了 public 的范围。很快,它是否只适用于标识符之后的声明,还是像 C++ 一样作用于它之后的所有内容?如果是前者,这将解释我的问题,因为在第二种情况下,public 之后的换行符将被忽略,从而使 myOtherVal 受到公共标识符的影响。

【问题讨论】:

  • 我是 Swift 新手,但什么是“公共”?我确定你需要减速!
  • 认为 public 和 let 之间有一个换行符。所以@objc 应该在公众面前。
  • 是的,感谢您的帮助,这是我对公共范围如何工作的误解。

标签: swift


【解决方案1】:

这与成为类中的第一个变量无关。 @objc 只需要在访问控制 (public) 之前。我不确定你为什么在上一行公开;这似乎令人困惑,我以前从未见过。

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

【讨论】:

  • OP 可能认为public适用于所有以下成员(如在某些其他语言中)。
  • 我做到了,并相应地编辑了我的帖子,只是问这个问题可能帮助我弄清楚了。我对公共范围的 C++ 方式感到困惑。感谢您的澄清。
  • 没问题;是的,在 Swift 中,public 声明仅适用于变量、函数、类或它之前的任何其他内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多