hiragram no blog

iOSとか

アクセス修飾子周りでSwiftのバグっぽいのみつけた

Swiftのバージョンは3.0

ViewController.swift

import UIKit

class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()

    print(TypeA.name)
  }

}

ProtocolA.swift

import Foundation

private protocol ProtocolA {

}

extension ProtocolA {
  static var name: String {
    return "aaa"
  }
}

struct TypeA: ProtocolA {

}

でビルドしようとするとこんなエラーが出る

Undefined symbols for architecture arm64:
  "protocol witness table for BugTestProj.TypeA : BugTestProj.(ProtocolA in _ED3794DE2981E83EA71158CCFF2975C6) in BugTestProj", referenced from:
      BugTestProj.ViewController.viewDidLoad () -> () in ViewController.o
  "static (extension in BugTestProj):BugTestProj.(ProtocolA in _ED3794DE2981E83EA71158CCFF2975C6).name.getter : Swift.String", referenced from:
      BugTestProj.ViewController.viewDidLoad () -> () in ViewController.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ProtocolAはprivateなので、そこに定義されてるメソッド/プロパティには外からアクセスできないんじゃないかなーと思うんだけどどうなんだろう。

バグレポートは送った。