Swift 3.0でFactory method パターン(static funcの謎)


御無沙汰です、代表です。
iOSのアプリ開発を、隙をみてチョコチョコやっているのですが、ごくたまにエラーを解決できずに長時間悩んでしまうことがあります。
以前はよく、^X ^S を間違ってタイプしてしまい、(Emacsでは編集中のソースコードをファイルに保存するショートカットです)これが謎のエラーを起こしてかなり悩んだことがありました。
最近のバージョンでは ^X ^S とタイプしても、エディタ上で『変なコードがあるから空白に変換しようか?』などとお節介を焼いてくれるので悩むことはないですが。

それで、表題の件ですよ。
結論を先に言いますと、
『Swift 3.0 において、staticなfuncには2個以上のパラメータはつけることが出来ない』
・・・何かの間違いであってほしいと思います。
ちょうど新しいXCodeのアップデートが来ているので、それで治っていれば良いのですが。
残念ながら私の環境では、「ディスク容量が足りない」と言われて最新のXCodeにアップデートすることが出来ないので、治ってるかどうかは分かりません。
XCodeのバージョンは 8.1 です。

現象をもう少し詳しく書きましょう。
以下のようなコードは実行時にエラーになります。
(掲載用に簡略化してあります)

// SampleClass.swift
class SampleClass: NSObject {
  var strTest1: String?
  var strTest2: String?

  static func newInstance(_ str: String, opt: String) -> SampleClass {
    let instance = SampleClass()
    instance.strTest1 = str
    instance.strTest2 = opt
    return instance
  }
}
// somewhere in the code
let inst = SampleClass.newInstance("teststring", opt: "options...")

SampleClass.newInstanceを呼び出したタイミングで、実行時エラーが起きます。

newInstanceメソッドから引数をひとつ減らすだけで、エラーは起きなくなります。

Factory Methodパターンをやりたいのに、引数が一個しか渡せないとか、頭がいたいです。

コメントを残す

メールアドレスが公開されることはありません。

*