จากตอนที่เราเขียน Enum เราจะไม่สามารถเขียนให้เป็น raw type และใช้ case argument ไปพร้อม ๆ กันได้
enum PaymentType: String {
case cheque(issuer:String)
case creditCard(number:String)
}
// ใช้ case argument และต้องการเป็น raw type String
// โปรแกรมจะไม่สามารถรันได้
เราสามารถนำ extension มาเพิ่มความสามารถให้กับ enum ที่เป็น case argument ทำให้สามารถเป็น raw type ได้ แบบนี้
enum PaymentType {
case cheque(issuer:String)
case creditCard(number:String)
var description: String {
switch self {
case let .cheque(issuer): return "Cheque issued by \(issuer)"
case let .creditCard(number): return "Credit card number \(number)"
}
}
}
extension PaymentType: RawRepresentable {
typealias RawValue = String
init?(rawValue: RawValue) {
switch rawValue {
case "Cheque": self = .cheque(issuer: "")
case "CreditCard": self = .creditCard(number: "")
default: return nil
}
}
var rawValue: String {
return description
}
}