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

标签 ios macos swift

当尝试像这样在枚举中采用 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/

相关文章:

ios - app.js不是由Alloy创建的。 [找不到文件app.js]错误

ios - 切换到横向时,Tableview 将约束更改为全屏

arrays - 如何按属性类型自动排序 Swift 中的数组?

ios - 是否可以在每个应用程序上发布具有不同数据的 IOS 应用程序?

ios - 与推送交互后导航到特定 ViewController

ios - 如果列存在则更改表,如果不存在则添加

ios - 在 Xamarin.iOS DYLD 中集成时,代码签名对于 iOS Objective C Umbrella 框架无效,库未加载 : App Crash

macos - Mac上的Docker Compose-镜像位置

ios - 如何将 3rd 方框架导入 Xcode Playground?

macos - 在mac上编译: What does it mean if my compiler fails a sanity check?