I used xcode 10.1
enum PriceType {
case cny
case usd
}
extension PriceType: ExpressibleByStringLiteral {
init(stringLiteral value: String) {
self.init(string: value)
}
init(unicodeScalarLiteral value: String) {
self.init(string: value)
}
init(extendedGraphemeClusterLiteral value: String) {
self.init(string: value)
}
init(string: String) {
switch string {
case "0":
self = .cny
case "1":
self = .usd
default:
switch Language.use {
case .cn(.hans):
self = "0"
case .en, .cn(.hant):
self = "1"
}
}
}
static var Symbol: String {
let priceStr: String = "0"
let priceType: PriceType = "priceType"
let priceType1: PriceType = priceStr // erorr: Cannot convert value of type 'String' to specified type 'PriceType'
return priceType.symbol
}
var symbol: String {
switch self {
case .cny:
return ""
case .usd:
return "$"
}
}
}when biuld, line 29 is erorr : Cannot convert value of type 'String' to specified type 'PriceType'
I hope can use :
let priceStr: String = "0"
let priceType1: PriceType = priceStrHow can I do? or it's cann't?
I hope can use:
That’s not going to work. Note the Literal part of the name
ExpressibleByStringLiteral. That protocol is only involved when dealing with literals. In your second code snippet the string literal is on line 1. Once you get to line 2 you’re dealing with a string
value, and thus
ExpressibleByStringLiteral never comes into play.
To see
ExpressibleByStringLiteral in action, you need to use a literal. For example:
let p1: PriceType = "xxx"Or:
let p2 = "xxx" as PriceTypeThose are not particularly useful examples. The
ExpressibleByStringLiteral facility works best when you already have established the type context in play. For example:
func discount(price: PriceType) -> PriceType {
fatalError()
}
let p3 = discount(price: "xxx")The
discount(price:) function takes a parameter of
PriceType, and that establishes the type context that allows you to pass in a string literal.
Share and Enjoy
—
Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware
let myEmail = "eskimo" + "1" + "@apple.com"