26787

[code]

    func imageForItem(item: Item) -> UIImage {
                var image : UIImage!
    
        //...
    
                return image
            }
    
[/code]

例えば上の関数みたいなものを  
複数のクラスから参照したい場合、どこに定義すればよいですか？


CC BY-SA 3.0
2016-06-16T07:32:02.007
26782
2016-06-16T10:05:51.353
12297
question
swift xcode
Swiftで複数のクラスで使う関数を定義したい場合、その定義はどこに書けばいいのですか？


特に決まりはありません。私の知る限り「これが定番」と言えるほど一般化したやり方もありません。グローバルな関数定義を書くための.swiftファイルを作って(もちろんプロジェクトに追加して)そこに記載すれば、同じプロジェクト内のどのファイルからでも参照できます。(他のファイルを間借り、例えばItem.swiftのクラス定義の後に追加してもOkです。)

* * *

もし一つだけ、かなり一般化しつつある指針があるとしたら、「できるだけグローバルな関数定義は行わない」と言うことでしょうか。

あなたが例としてあげられたコードであれば、`Item`クラスのextensionとして書くことができます。

[code]

    //Item+image.swift
    extension Item {
        var image: UIImage {
            var resultImage: UIImage!
            //...関数の`item`引数の代わりに`self`を使って記述
            return resultImage
        }
    }
    
[/code]

と言った感じのextensionを作ってやれば、`imageForItem(anItem)`の代わりに`anItem.image`で同じ結果が得られるようになります。  
ちなみにこのようなextensionを`Item`クラスとは別のファイルに置くのであれば、Appleのサンプルコードでは、"{元のクラス名}+{拡張を表す簡単な単語}.swift"と言ったファイル名にすることが多いです。

あげられた例は単純化してあって、やはりメソッドにはしにくいものもあるかも知れませんが、「関数よりもextension」はSwiftでプログラミングするなら一度は検討された方が良いと思います。


CC BY-SA 3.0
2016-06-16T10:05:51.353
26787
2016-06-16T10:05:51.353
13972
26782
answer