Created
April 2, 2020 13:57
-
-
Save aainaj/991f0fd197075656f4936e83dac962a0 to your computer and use it in GitHub Desktop.
BuilderPattern for creating multiple type of objects using struct for model
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct OptionDetailDataStruct: Equatable { | |
let isExpired: Bool | |
let expiryDate: String? | |
let cardNumber: String? | |
let formattedNumber: String? | |
let phoneNumber: String? | |
} | |
class OptionDetailDataBuilderStruct { | |
private var isExpired: Bool = false | |
private var expiryDate: String? | |
private var cardNumber: String? | |
private var formattedNumber: String? | |
private var phoneNumber: String? | |
func set(isExpired: Bool) -> OptionDetailDataBuilderStruct { | |
self.isExpired = isExpired | |
return self | |
} | |
func set(expiryDate: String) -> OptionDetailDataBuilderStruct { | |
self.expiryDate = expiryDate | |
return self | |
} | |
func set(cardNumber: String) -> OptionDetailDataBuilderStruct { | |
self.cardNumber = cardNumber | |
return self | |
} | |
func set(formattedNumber: String) -> OptionDetailDataBuilderStruct { | |
self.formattedNumber = formattedNumber | |
return self | |
} | |
func set(phoneNumber: String) -> OptionDetailDataBuilderStruct { | |
self.phoneNumber = phoneNumber | |
return self | |
} | |
func build() -> OptionDetailDataStruct { | |
return OptionDetailDataStruct(isExpired: isExpired, expiryDate: expiryDate, cardNumber: cardNumber, formattedNumber: formattedNumber, phoneNumber: phoneNumber) | |
} | |
} | |
let data1 = OptionDetailDataBuilderStruct() | |
.set(isExpired: false) | |
.set(expiryDate: "Today") | |
.set(formattedNumber: "****1234****") | |
.set(phoneNumber: "9876543210") | |
.set(cardNumber: "441122224411") | |
.build() | |
let walletMetadata1 = OptionDetailDataBuilderStruct() | |
.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