2017-07-07 82 views
3

如果我有以下枚舉:是否可以用Swift把一個元組放在一個枚舉中?

enum FruitTuple 
{ 
    static let Apple = (shape:"round",colour:"red") 
    static let Orange = (shape:"round",colour:"orange") 
    static let Banana = (shape:"long",colour:"yellow") 
} 

然後,我有以下功能:

static func PrintFruit(fruit:FruitTuple) 
{ 
    let shape:String = fruit.shape 
    let colour:String = fruit.colour 

    print("Fruit is \(shape) and \(colour)") 
} 

fruit.shapefruit.colour我得到的錯誤:

Value of type 'FruitTuple' has no member 'shape'

博覽會足夠,所以我改變枚舉有一個類型:

enum FruitTuple:(shape:String, colour:String) 
{ 
    static let Apple = (shape:"round",colour:"red") 
    static let Orange = (shape:"round",colour:"orange") 
    static let Banana = (shape:"long",colour:"yellow") 
} 

但隨後在枚舉聲明我得到的錯誤:

Inheritance from non-named type '(shape: String, colour: String)'

所以,問題是:它甚至有可能在一個枚舉一個數組和能夠引用它的組件部分以這種方式?我在這裏錯過了一些基本的東西嗎?

+2

'FruitTuple.Apple'等只是元組,它們是* not *枚舉值(你沒有定義任何'case's)。 'enum FruitTuple'只提供一個「命名空間」(如https://stackoverflow.com/questions/38585344/swift-constants-struct-or-enum) –

+0

相關:https://stackoverflow.com/questions/26387275/枚舉的元組功能於迅速。 –

+0

乾杯,相關的問題有幫助。關於命名空間的觀點現在完全有意義了! – Wex

回答

4

正如@MartinR指出的那樣。此外,根據Apple文檔,「枚舉案例可以指定與每個不同案例值一起存儲的任何類型的關聯值」。如果你想使用enum保留,你可能需要做一些事情,如:

static func PrintFruit(fruit:FruitTuple.Apple) 
{ 
    let shape:String = fruit.shape 
    let colour:String = fruit.colour 

    print("Fruit is \(shape) and \(colour)") 
} 

我不能確定你想要什麼,但我想用typealias可以幫助實現自己的目標。

typealias FruitTuple = (shape: String, colour: String) 

enum Fruit 
{ 
    static let apple = FruitTuple("round" , "red") 
    static let orange = FruitTuple("round", "orange") 
    static let banana = FruitTuple("long", "yellow") 
} 

func printFruit(fruitTuple: FruitTuple) 
{ 
    let shape:String = fruitTuple.shape 
    let colour:String = fruitTuple.colour 
} 
+1

當你開始使用一個元組的類型別名時,它可能是一個struct – Alexander

+0

@Alexander的時候通常,如果我有<= 2個屬性,我使用元組(w /或w/o'typlealias')來簡化代碼不需要施工人員和定製的可調整功能。你能否以正確的方向指出我爲什麼要在這種情況下使用struct? – Lawliet

+2

那麼,你不能使用這些作爲一個字典鍵,因爲元組不能符合Hashable(或任何協議,就此而言)。另外,'Fruit'可以是任何('String','String')元組。我的'typealias Person =(firstName:String,lastName:String)'元組是相同的類型。我可以說:'讓p:Person = FruitTuple(「round」,「red」)'。雖然我想有些人是紅色的,圓的和果味的,但我不認爲這是有意的。 – Alexander

相關問題