日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

利用Enum靈活映射多重類型數(shù)據(jù)模型實(shí)例

大?。?/span>0.3 MB 人氣: 2017-09-26 需要積分:1

  一個字段中返回了多種相似的類型

  先來看下項(xiàng)目中我遇到的一個情況,服務(wù)端在人物中返回了一組數(shù)據(jù)。這些人物有幾個相同的屬性,但是又有各自不同的角色各有的屬性。json數(shù)據(jù)如下:

  “characters” : [

  {

  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”

  }

  ]

  那么我們可以怎么解析這樣的數(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)目中我原來使用的方案。但是很快就會覺得有點(diǎn)苦逼,因?yàn)槭褂玫臅r(shí)候要不斷的類型判斷,然后類型轉(zhuǎ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)

  }

  利用結(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)體,解析的性能會好一些。但是看起來和前面類的方案差不多。我們并沒有利用上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)換的潛在問題

  上面的這種類型轉(zhuǎn)換可能引入潛在的問題。如果后臺此時(shí)增加了一個類型對代碼會產(chǎn)生什么樣的影響呢?可能想到這種情況提前做了處理,也可能沒有處理導(dǎo)致崩潰。

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價(jià):好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?
      辛集市| 汽车| 五华县| 华坪县| 丰原市| 北碚区| 汉中市| 邵阳市| 安陆市| 肃南| 墨江| 达拉特旗| 朝阳区| 金沙县| 巴中市| 富川| 大同县| 包头市| 正定县| 闽侯县| 尚志市| 勐海县| 临沧市| 五华县| 宣城市| 新余市| 永泰县| 沁水县| 林周县| 盐城市| 桓台县| 汨罗市| 广宗县| 休宁县| 莎车县| 阳泉市| 仙桃市| 南岸区| 浦北县| 嘉禾县| 明溪县|