利用Enum靈活映射多重類型數(shù)據(jù)模型實(shí)例
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
一個(gè)字段中返回了多種相似的類型
先來(lái)看下項(xiàng)目中我遇到的一個(gè)情況,服務(wù)端在人物中返回了一組數(shù)據(jù)。這些人物有幾個(gè)相同的屬性,但是又有各自不同的角色各有的屬性。json數(shù)據(jù)如下:
{
type: “hero”,
name: “Jake”,
power: “Shapeshift”
},
{
type: “hero”,
name: “Finn”,
power: “Grass sword”
},
{
type: “princess”,
name: “Lumpy Space Princess”,
kingdom: “Lumpy Space”
},
{
type: “civilian”,
name: “BMO”
},
{
type: “princess”,
name: “Princess Bubblegum”,
kingdom: “Candy”
}
?。?/p>
那么我們可以怎么解析這樣的數(shù)據(jù)呢?
利用類和繼承
class Character {
type: String
name: String
}
class Hero : Character {
power: String
}
class Princess : Character {
kingdom: String
}
class Civilian : Character {
}
。。.
struct Model {
characters: [Character]
}
這其實(shí)就是項(xiàng)目中我原來(lái)使用的方案。但是很快就會(huì)覺(jué)得有點(diǎn)苦逼,因?yàn)槭褂玫臅r(shí)候要不斷的類型判斷,然后類型轉(zhuǎn)換后才能訪問(wèn)到某個(gè)具體類型的屬性:
// Type checking
if model.characters[indexPath.row] is Hero {
print(model.characters[indexPath.row].name)
}
// Type checking and Typecasting
if let hero = model.characters[indexPath.row] as? Hero {
print(hero.power)
}
利用結(jié)構(gòu)體和協(xié)議
protocol Character {
var type: String { get set }
var name: String { get set }
}
struct Hero : Character {
power: String
}
struct Princess : Character {
kingdom: String
}
struct Civilian : Character {
}
。。.
struct Model {
characters: [Character]
}
這里我們使用了結(jié)構(gòu)體,解析的性能會(huì)好一些。但是看起來(lái)和前面類的方案差不多。我們并沒(méi)有利用上protocol的特點(diǎn),使用的時(shí)候我們還是要進(jìn)行類型判斷:
// Type checking
if model.characters[indexPath.row] is Hero {
print(model.characters[indexPath.row].name)
}
// Type checking and Typecasting
if let hero = model.characters[indexPath.row] as? Hero {
print(hero.power)
}
類型轉(zhuǎn)換的潛在問(wèn)題
上面的這種類型轉(zhuǎn)換可能引入潛在的問(wèn)題。如果后臺(tái)此時(shí)增加了一個(gè)類型對(duì)代碼會(huì)產(chǎn)生什么樣的影響呢?可能想到這種情況提前做了處理,也可能沒(méi)有處理導(dǎo)致崩潰。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
利用Enum靈活映射多重類型數(shù)據(jù)模型實(shí)例下載
相關(guān)電子資料下載
- iOS17.1可能明天發(fā)布,iOS17.1主要修復(fù)哪些問(wèn)題? 377
- 拿下國(guó)家級(jí)信創(chuàng)認(rèn)證!中科馭數(shù)KPU SWIFT-2200N成為國(guó)內(nèi)首款滿足金融業(yè)嚴(yán)苛要求的 163
- 華為全新鴻蒙蓄勢(shì)待發(fā) 僅支持鴻蒙內(nèi)核和鴻蒙系統(tǒng)應(yīng)用 719
- 蘋(píng)果手機(jī)系統(tǒng)iOS 17遭用戶質(zhì)疑 731
- iPhone12輻射超標(biāo)?蘋(píng)果推送iOS 17.1解決此事 750
- 傳華為囤積零部件 目標(biāo)明年智能手機(jī)出貨7000萬(wàn)部;消息稱 MiOS 僅限國(guó)內(nèi),小米 28208
- 蘋(píng)果推送iOS17.0.3,解決iPhone15Pro系列存在機(jī)身過(guò)熱 216
- Testin云測(cè)兼容和真機(jī)服務(wù)平臺(tái)中上線iPhone 15系列手機(jī) 208
- 利爾達(dá)推出搭載HooRiiOS的Matter模組 145
- 運(yùn)放參數(shù)解析:輸入偏置電流(Ibias)和失調(diào)電流(Ios) 128