gpt4 book ai didi

swift - 为什么 Xcode 告诉我添加 .map { $0.rawValue } 而我只能做 ?.rawValue?

转载 作者:IT王子 更新时间:2023-10-29 05:14:29 25 4
gpt4 key购买 nike

我有这个代码:

enum Enum: String {
case A = "A"
}

let s: String? = Enum(rawValue: "A")

当然,它不会编译。通常,我会这样修复它:

let s: String? = Enum(rawValue: "A")?.rawValue

但是,Xcode 说我应该添加 .map { $0.rawValue }:

enter image description here

这很奇怪,因为很明显,Xcode 知道访问 rawValue 可以将 Enum 转换为 String。但是为什么它建议使用 map 来做呢?为什么不直接访问它?

我以为Xcode会这样想:

I've got a string constant on the left and an enum whose raw value is string. The types are not compatible, but I know rawValue can turn the enum into a string. I'll just suggest the user to add ?.rawValue!

这背后Xcode的“思考过程”是怎样的?

附言我的目的是检查 "A" 是否是枚举的有效原始值。如果是,则赋给s,否则赋给nil。我知道这不是很实用,但我只关心 Xcode 的行为。

最佳答案

João Marcelo Souza 的第三个答案完全正确。 .map 是可选的安全展开方法卓越Enum(rawValue: "A").map{$0.rawValue} Enum(rawValue: "A")?.rawValue

问题仅仅是我们都习惯于使用第二种(语法糖),而忘记了第一种是 Swift 编译器在底层的实际思考方式。

例子:

var i : [Int]? = [7]
i.map {$0.count} // 1
i?.count // 1

i = nil
i.map {$0.count} // nil
i?.count // nil

关于swift - 为什么 Xcode 告诉我添加 .map { $0.rawValue } 而我只能做 ?.rawValue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42631392/

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