我如何將物件 1 轉換為具有附加屬性的物件 2
class Object1 {
var imageUrl: String
var title: String
var description: String
var order: Int
}
class Object2 {
var imageUrl: String
var title: String
var description: String
var buttonTitle: String
var pageType: OnboardingType
}
到目前為止我正在嘗試的是這個
var items: [Object1] = []
var items2: [Object2] = [] {
return convertItems(items: items)
}
private func convertItems(items: [Object1]) -> [Object2] {
var object2Item: [Object2] = []
items.forEach { item in
if item.order == 1 {
object2Item.append(Object2(imageUrl: item.imageUrl, title: item.title, description: item.description, buttonTitle: nil, onboardingType: .hajj))
} else if item.order == 2 {
object2Item.append(Object2(imageUrl: item.imageUrl, title: item.title, description: item.description, buttonTitle: nil, onboardingType: .hajj))
} else if item.order == 3 {
object2Item.append(Object2(imageUrl: item.imageUrl, title: item.title, description: item.description, buttonTitle: "some text".localized, onboardingType: .hajj))
}
}
return object2Item
}
我在另一個帶有協議協議模型的stackoverflow帖子中看到了這一點,但是如果我將協議用作物件型別,我將無法獲得其他屬性
uj5u.com熱心網友回復:
你的問題被標記為[oop],所以我將從這個角度回答。
您應該避免將物件視為愚蠢的資料組,這不是 OOP 的意義所在。將相關欄位聚合成某種記錄比 OOP 早了幾十年。OOP 是關于多型性:讓物件以不同的方式回應相同的訊息,這樣物件的所有用戶就不必手動檢查其型別。我在您的樣本中沒有看到任何可以從多型性中受益的東西。
物件旨在為事物建模。我不知道你在這個例子中建模了什么(如果你明白我的意思,也沒有真正傳達太多意圖)Object1。Object2
此處“正確”的 OOP 解決方案是以物件建模的方式命名物件。如果您需要對從一件事到另一件事的轉換進行建模,那么該轉換的名稱應該受業務領域的啟發。例如,一個物件可能會通過一個方法SalesLead變成一個物件。或者 a可能有一個回傳 a 的方法。等等。CustomerObjectsaleCompletedDownloadingFiledownloadeCompletedFile
如果您為您的問題提供更多背景資訊,我可以使這個建議更加量身定制,但現在,我將從以下內容開始:
extension Object1 {
init(from object1: Object) { // FIXME: Give a meaningful name
let buttonTitle: String?
switch object1.order {
case 1, 2: buttonTitle = nil
case 3: buttonTitle = "some text".localized
default: fatalError("Not implemented")
}
self.init(
imageUrl: object1.imageUrl,
title: object1.title,
description: object1.description,
buttonTitle: buttonTitle,
pageType: .hajj,
)
}
}
private func convertItems(items: [Object1]) -> [Object2] { // FIXME: Give a meaningful name
items.map(Object2.init(from:))
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/481949.html
上一篇:Python獲取父類
