2258


Swiftの列挙型がCountを返してくれないので、グローバル関数でループを回して数えるようなことを考えています。

[code]

    protocol CountableIntEnum {
        init?(rawValue: Int)
    }
    
    func enumCount(CountableEnumType: CountableIntEnum.Type) -> Int {
        var count = 0
        while CountableEnumType(rawValue: count) != nil {
            count++
        }
        return count
    }
    
    enum Podium: Int, CountableIntEnum {
        case First = 0
        case Second
        case Third
    
        static let count = enumCount(Podium)
    }
    
    println(Podium.count)
    
[/code]

上記のようなコードを記述すると、コーディング中は問題ないのですが ビルド時に

[code]

    Command failed due to signal: Segmentation fault: 11
    While emitting IR SIL function @_TF8EnumTest9enumCountFPMPS_16CountableIntEnum_Si for 'enumCount'
    
[/code]

というエラーでビルドすることが出来ません。

クラスオブジェクトを変数に入れて、そのイニシャライザを呼ぶ正しい方法はどのようにすればよいでしょうか？

また、別の方法でもいいのですが、Foundationの力を借りずに動的にEnumType(rawValue: Int)を呼ぶ方法などはないでしょうか？


CC BY-SA 3.0
2014-12-20T04:47:48.580
2209
2014-12-20T14:42:45.750
2014-12-20T05:13:27.390
728
3808
question
ios swift
Swiftのタイプオブジェクトから、動的にイニシャライザを呼ぶ方法


関数の定義を以下のように変更すれば動作するようです。

[code]

    func enumCount<T:CountableIntEnum>(CountableEnumType: T.Type) -> Int
    
[/code]


CC BY-SA 3.0
2014-12-20T14:42:45.750
2258
2014-12-20T14:42:45.750
3154
2209
answer