infix operatorが他のファイルから参照できない
以下のように新たな演算子を定義し、そして処理を書きました。
これをMaybe.swiftとしてxcodeプロジェクトに追加します。
infix operator >>= { associativity left }
public func >>=<T, U>(optional: T?, f: T -> U?) -> U? {
if let x = optional {
return f(x)
} else {
return nil
}
}
この状態で、Maybe.swift以外のSwiftコード、例えばViewController.swiftで、
let input: String? = "10"
let output = input >>= { value -> Int? in
Int((value as NSString).intValue)
} >>= { value -> Int? in
if value >= 0 {
return value
}
return nil
}
のように使おうと試みますが、これだけではコンパイルに失敗します。
エラー> [...省略]/ViewController.swift:17:28: Cannot invoke '>>=' with an argument list of type '(String?, $T9)'
トライ&エラーにより、わかった原因は、演算子の定義が見えていないことです。
なので、この場合、ViewController.swiftのグローバルスコープに、
infix operator >>= { associativity left }
を足してやることによって、コンパイルに成功し、動作も正常になりました。
しかしこの解決方法では、
この演算子を使いたいファイルには全て
infix operator >>= { associativity left }
を毎回コピペしなくてはなりません。
これをコピペしなくて済む方法はありませんでしょうか?