[英]Swift enums that call a method
說我有一個這樣的枚舉:
enum ItemType {
case TypeOne
case TypeTwo
case TypeThree
}
然后,我有一個方法,該方法根據所選的ItemType
調用另一個方法:
func getItem(withType: ItemType) {
switch withType {
case TypeOne:
getTypeOneItem()
case TypeTwo:
getTypeTwoItem()
case TypeThree:
getTypeThreeItem()
}
}
我只是想知道是否有更好的方法來編寫此代碼,如果我有很多ItemTypes
則switch語句將變得非常混亂。
不知道這是可能的,但也許一個enum
調用直接的方法, enum xx { case TypeOne: ?? = getTypeOneItem() ...
enum xx { case TypeOne: ?? = getTypeOneItem() ...
一個簡單的解決方案是使用枚舉作為字典的鍵。 假設它們都是空的。 您可以執行以下操作:
import Foundation
enum ItemType
{
case TypeOne
case TypeTwo
case TypeThree
}
func getTypeOneItem() -> Void
{
print("One")
}
func getTypeTwoItem() -> Void
{
print("Two")
}
func getTypeThreeItem() -> Void
{
print("Three")
}
// Register all the enum values
let dict = [ItemType.TypeOne: getTypeOneItem, ItemType.TypeTwo: getTypeTwoItem, ItemType.TypeThree: getTypeThreeItem]
// Fetch
let function1 = dict[ItemType.TypeOne]!
function1() // This prints "One"
對我來說,它看起來比使用開關更干凈。
將函數插入到枚舉本身。 您不再需要參數。 您甚至可以使用static
將其添加到類型中,但這沒有任何意義,因為您始終需要使用ItemType
類型的變量。
func getTypeOneItem() -> Void {
print("typeOne")
}
func getTypeTwoItem() -> Void {
print("typeTwo")
}
func getTypeThreeItem() -> Void {
print("typeThree")
}
enum ItemType {
case TypeOne
case TypeTwo
case TypeThree
func getItem() -> Void {
switch self {
case .TypeOne:
getTypeOneItem()
case .TypeTwo:
getTypeTwoItem()
case .TypeThree:
getTypeThreeItem()
}
}
}
let item: ItemType = ItemType.TypeOne
item.getItem() // prints typeOne
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.