Skip to content

Instantly share code, notes, and snippets.

@aainaj
Created April 2, 2020 03:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aainaj/223fcf8164bed8f7c5644eb5d662e429 to your computer and use it in GitHub Desktop.
Save aainaj/223fcf8164bed8f7c5644eb5d662e429 to your computer and use it in GitHub Desktop.
BuilderPattern for creating multiple type of objects
class OptionDetailData: Equatable {
var isExpired: Bool = false
var expiryDate: String?
var cardNumber: String?
var formattedNumber: String?
var phoneNumber: String?
static func == (lhs: OptionDetailData, rhs: OptionDetailData) -> Bool {
return true
}
class Builder {
private var detailData: OptionDetailData = OptionDetailData()
func set(isExpired: Bool) -> Builder {
detailData.isExpired = isExpired
return self
}
func set(expiryDate: String) -> Builder {
detailData.expiryDate = expiryDate
return self
}
func set(cardNumber: String) -> Builder {
detailData.cardNumber = cardNumber
return self
}
func set(formattedNumber: String) -> Builder {
detailData.formattedNumber = formattedNumber
return self
}
func set(phoneNumber: String) -> Builder {
detailData.phoneNumber = phoneNumber
return self
}
func build() -> OptionDetailData {
return detailData
}
}
}
let data = OptionDetailData.Builder()
.set(isExpired: false)
.set(expiryDate: "Today")
.set(formattedNumber: "****1234****")
.set(phoneNumber: "9876543210")
.set(cardNumber: "441122224411")
.build()
print(data)
let walletMetadata = OptionDetailData.Builder()
.set(phoneNumber: "9876543210")
.build()
print(walletMetadata.phoneNumber)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment