gpt4 book ai didi

swift 。具有可选 RawValue 的 RawRepresentable init

转载 作者:可可西里 更新时间:2023-11-01 00:57:30 24 4
gpt4 key购买 nike

我正在尝试为 RawRepresentable 创建一个带有可选参数的通用可失败初始化程序,基本上是这个 https://www.natashatherobot.com/swift-failable-enums-with-optionals/

有几个方法被提出,其中一个是这个(编辑:修复了第二个子句中的 let):

extension RawRepresentable {

init?(rawValue optionalRawValue: RawValue?) {

guard let rawValue = optionalRawValue, let value = Self(rawValue: rawValue) else { return nil }

self = value
}
}

从这里https://gist.github.com/okla/e5dd8fbb4e604dabcdc3

我不知道它是否曾经在 Swift 2 上工作,但我无法在 Swift 3 上编译它。我得到:

Command failed due to signal: Segmentation fault: 11

有没有办法让它工作?

附言我从这篇文章及其评论中了解到其他方法。

编辑:修复了损坏的复制/粘贴代码。

最佳答案

我刚刚将您的代码复制并粘贴到 Playground 中,我遇到的唯一错误是在 guard< 中分配 value 之前缺少 let/声明。

您确定段错误是因为这个扩展吗?

这是适合我的代码(Xcode 8.2.1、Swift 3.0.2):

extension RawRepresentable {

init?(rawValue optionalRawValue: RawValue?) {

guard let rawValue = optionalRawValue, let value = Self(rawValue: rawValue) else { return nil }

self = value
}
}

-- 编辑 --

在用原始值定义了一个枚举之后,我得到了一个错误。

添加这个会使 Playground 崩溃:

enum Counter: Int {
case one = 1, two, three, four, five
}

通过将 init? 中的参数重命名为 init?(optRawValue optionalRawValue: RawValue?) 修复了此问题。我猜问题是你在 init? 中调用了 Self(rawValue: rawValue),而编译器不知道使用哪一个...

关于 swift 。具有可选 RawValue 的 RawRepresentable init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373485/

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