访问扩展中的结构时出现保护级别问题

Ben*_*van 3 file-permissions access-control swift swift-extensions swift3

我正在尝试将以下库实现到我的项目中:

https://github.com/knutigro/COBezierTableView

要使用它,可以为以下属性提供自定义值:

public extension UIView {

  public struct BezierPoints {

      static var p1 = CGPoint.zero
      static var p2 = CGPoint.zero
      static var p3 = CGPoint.zero
      static var p4 = CGPoint.zero
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的MainVC中,这配置如下:

UIView.BezierPoints.p1 = CGPoint(...
UIView.BezierPoints.p2 = CGPoint(...
UIView.BezierPoints.p3 = CGPoint(...
UIView.BezierPoints.p4 = CGPoint(...
Run Code Online (Sandbox Code Playgroud)

在Swift 2.3演示项目中没有错误.在Swift 3项目中,我收到错误:

"由于'内部'保护级别,p1无法访问."

有人可以在这里解释一下这个问题,我猜测Swift 3有一些新的幕后权限接管需要被覆盖.

Fel*_*SFD 7

我想,你提到的扩展名与你的MainVC目标不同?

因为p1没有分配保护级别(而struct不是private),它们是自动的internal.这意味着,您只能在同一目标中访问这些属性.

但在早期版本的Swift中也是如此.我不知道,为什么你的代码有效.

  • 哦,当然!我没想到演示项目没有相同的目标.将属性更改为公共已解决此问题,我还发现了这个有用的资源https://www.andrewcbancroft.com/2015/04/22/3-nuances-of-swift-extensions/ (2认同)