2015-04-06 37 views
2

我有一個名爲Foo的字符串類型的枚舉。在Swift中,如何在一個結構中初始化一個可選的枚舉爲零?

我有一個名爲MyStruct的結構,它有一個可選的Foo實例,我希望它最初爲零。

此外MyStruct有一個failable初始化程序。

問題:當我讓MyStruct具有failable初始值設定項和可選的Foo實例(最初爲零)時,我的構建失敗,我得到「Segmentation fault:11」。

當我將MyStruct重命名爲MyClass並將其類型更改爲類時,沒有任何問題。

有沒有人可以告訴我爲什麼我不能在結構中使用failable初始值設定項和可選枚舉值初始化爲零?

import Foundation 

enum Foo: String { 
    case Bla = "blabla" 
} 

public struct MyStruct { 
    var myEnum: Foo? 

    public init?() {} 
} 

var myStruct = MyStruct() 
if let myEnum = myStruct?.myEnum { 
    println("myEnum is not nil => \(myEnum.rawValue)") 
} else { 
    println("myEnum is nil") 
} 

回答

2

該崩潰來自您的空init?()方法。這是一個編譯器錯誤,你應該打開一個關於它的雷達。問題是這個函數沒有辦法實際失敗,Swift不喜歡這個。下面將編譯實例(但仍然會崩潰,如果ignoreme是BOOL):

var ignoreme = 0 

public struct MyStruct { 
    var myEnum: Foo? 

    public init?() { 
     if ignoreme != 0 { return nil } 
    } 
} 

有時(但不總是)在init?()沒有實際失效的情況下,編譯器就會犯糊塗。

+0

我試過你的代碼,但我仍然得到相同的錯誤。它只在我使它成爲不可分解的初始化程序或將類型更改爲類時編譯。 – 2015-04-06 18:15:36

相關問題