gpt4 book ai didi

ios - 是否可以使用枚举来符合 StringLiteralConvertible?

转载 作者:搜寻专家 更新时间:2023-11-01 06:10:18 25 4
gpt4 key购买 nike

当尝试像这样在枚举中采用 StringLiteralConvertible 时:

enum Component: StringLiteralConvertible {
case Static(String)
case AnyInt

typealias ExtendedGraphemeClusterLiteralType = String
typealias UnicodeScalarLiteralType = String

init(unicodeScalarLiteral value: UnicodeScalarLiteralType) {
}
init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) {
}
init(stringLiteral value: String) {
}
}

我收到以下错误:

Variable 'self' used before initialized

在每个初始化器中。

根据 NSHipster ,符合该协议(protocol)的正确方法涉及覆盖一个类 func,该类 func 采用字符串文字并返回所需类/结构的对象。像这样:

static func convertFromStringLiteral(value: String) -> CGPoint {
return NSPointFromString(value) // CGPointFromString on iOS
}

这在最近的 Swift 更新中有变化吗?是否可以采用 StringLiteralConvertible 作为枚举?

最佳答案

StringLiteralConvertible 协议(protocol)已经改变,convertFromStringLiteral函数不再存在。

您已经拥有所需的初始值设定项。错误是您没有为 self 赋值。示例实现:

enum Component: StringLiteralConvertible {
case Static(String)
case AnyInt

init(stringLiteral value: String) {
self = Static(value)
}

init(extendedGraphemeClusterLiteral value: String) {
self = Static(value)
}

init(unicodeScalarLiteral value: String) {
self = Static(value)
}
}

let comp : Component = "Foo"

Swift 3/4 更新:

enum Component: ExpressibleByStringLiteral {
case `static`(String)
case anyInt

init(stringLiteral value: String) {
self = .static(value)
}
}

let comp: Component = "Foo"

关于ios - 是否可以使用枚举来符合 StringLiteralConvertible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com