extensionについて


コード:

[code]

    class Hoge {
        var a: Int = 0
        var b: Int = 0
    
        init(a: Int, b: Int) {
            self.a = a
            self.b = b
        }
    
        func tasi() {
            println(a + b)
        }
    }
    
    var hoge: Hoge = Hoge(a: 10, b: 20)
    
    hoge.tasi()
    
    extension Hoge {
        func kake() {
            println(a * b)
        }
    }
    
    hoge.kake()
    
[/code]

結果:

[code]

    30
    200
    
[/code]

上記コードでextension Hogeのあと、再度インスタンス化する必要があると思うのですが、hoge.kake()が実行できてしまいます。

実行環境が、<http://www.runswiftlang.com/> なので、バグかなと思っているのですが、これはswiftの正しい動きなのでしょうか？

よろしくお願いします。




正しい動作です。

>
> extensionを定義して既存の型に新しい機能を追加した場合、その新しい機能はextensionを定義する前に作られていたものを含むすべてのインスタンスにおいて有効になります。

<https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html#//apple_ref/doc/uid/TP40014097-CH24-ID470>

> If you define an extension to add new functionality to an existing  
>  type, the new functionality will be available on all existing  
>  instances of that type, even if they were created before the extension  
>  was defined.




正しい動作です。

>
> extensionを定義して既存の型に新しい機能を追加した場合、その新しい機能はextensionを定義する前に作られていたものを含むすべてのインスタンスにおいて有効になります。

<https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html#//apple_ref/doc/uid/TP40014097-CH24-ID470>

> If you define an extension to add new functionality to an existing  
>  type, the new functionality will be available on all existing  
>  instances of that type, even if they were created before the extension  
>  was defined.

