2017-08-30 54 views
0

我有一個UITableView有2個自定義單元格。自定義單元格的類型由我們從Web服務獲得的關鍵字「JourneyType」定義。因此,如果旅程類型爲Solo,我們需要使用SoloCustomCell顯示單元格,如果旅程類型爲Group,則需要使用GroupCustomCell顯示單元格。我想用enum來確定分配單元的Switch情況。我已經定義枚舉這樣的:如何在Swift3中使用Enum在UITableView中分配自定義單元格?

enum SubscriptionTripType: Int { 
    case oneWayTrip = 1 
    case roundTrip 
    case splitShift 

    var value: String { 
    switch self { 
    case .oneWayTrip: 
     return NSLocalizedString("One way", comment: "") 
    case .roundTrip: 
     return NSLocalizedString("Round trip", comment: "") 
    case .splitShift: 
     return NSLocalizedString("Split shift", comment: "") 
    } 
    } 
} 

現在在cellForRowIndex我已經定義了這樣的代碼:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let subscription = mySubscriptionDetails[indexPath.row] 
    switch subscription.journeyType{ 
    case 0: 
     let proposePoolcell = tableView.dequeueReusableCell(withIdentifier: "subscriptionCell", for: indexPath) as? MySubscriptionCustomCell 
     configure(cell: proposePoolcell!, forRowAtIndexPath: indexPath) 
     return proposePoolcell! 
    case 1: 
     let splitShiftCell = tableView.dequeueReusableCell(withIdentifier: "splitShiftCell", for: indexPath) as? SplitShiftSubscriptionCell 
     return splitShiftCell! 
    default:break 
    } 
    } 

Subscription.journeyType是我們從Web服務所獲得的價值。當前訂閱數組包含8個元素,每個元素具有journeyType。所以我們需要根據上面定義的枚舉來檢查案例。如何根據Enum爲特定的旅程類型填充單元格。

+0

你的問題是什麼?發生什麼事?爲什麼在你的csee中使用關聯int值而不是枚舉值?你問如何將int從Web服務轉換爲枚舉值?如果是這樣,請使用rawValue – Paulw11

+0

@ Paulw11請參閱我從webservice獲取Journey Type的值爲「單向」。所以我需要檢查值是否是單向我應該放置「單向」的另一個單元格的自定義單元格。 –

+0

你問的是如何初始化一個字符串rawValue的枚舉值?你有沒有閱讀Swift Book中關於枚舉的章節? – Paulw11

回答

1

如果我正確理解您的問題,您想要使用Web服務API中的字符串來初始化枚舉值。

最簡單的方法是在枚舉中使用字符串原始值。現在

enum SubscriptionTripType: String { 
    case oneWayTrip = "One Way" 
    case roundTrip = "Round Trip" 
    case splitShift = "Split Shift" 
} 

,你可以說像初始化一個實例:

if let tripType = SubscriptionTripType(rawValue:"One Way") { 
    print(tripType) 
} else { 
    print("Invalid trip type") 
} 

然後,您可以使用旅行類型以確定的tableview細胞和你switch語句可以窮盡你不需要一個default的情況下

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let subscription = mySubscriptionDetails[indexPath.row] 
    switch subscription.journeyType { 
    case .oneWayTrip: 
     let proposePoolcell = tableView.dequeueReusableCell(withIdentifier: "subscriptionCell", for: indexPath) as! MySubscriptionCustomCell 
     configure(cell: proposePoolcell, forRowAtIndexPath: indexPath) 
     return proposePoolcell 

    case .roundTrip: 
     let roundTripCell = tableView.dequeueReusableCell(withIdentifier: "roundTripCell", for: indexPath) as! MyRoundTripCustomCell 
     configure(cell: proposePoolcell, forRowAtIndexPath: indexPath) 
     return roundTripCell 

    case .splitShift: 
     let splitShiftCell = tableView.dequeueReusableCell(withIdentifier: "splitShiftCell", for: indexPath) as! SplitShiftSubscriptionCell 
     return splitShiftCell! 
    } 
} 
相關問題