if let encoding = String.Encoding(rawValue: 999) {
  // ...
}

生成一个编译器错误,称"条件绑定的初始值设定项必须具有可选类型,而不是"String.Encoding",因为尽管有docs saying the String.Encoding initializer is failable个,但它不是并且很乐意创建不存在的编码.

如何判断初始化器返回的编码是否为实际编码?

我有两个 idea

  1. 判断字符串.编码描述不为空.这假设支持的编码必须有描述
  2. 编码一些东西,例如"abc".data(using: encoding) == nil,它假设字符串"abc"可以通过所有支持的编码进行编码

推荐答案

文件具有误导性,String.Encoding具有不可故障的

 public init(rawValue: UInt)

初始值设定项.所有有效字符串编码的列表为String.availableStringEncodings,因此可以使用该列表判断有效性:

let encoding = String.Encoding(rawValue: 999)
print(String.availableStringEncodings.contains(encoding)) // false

Swift相关问答推荐

为什么Swift在某些链调用中不能对不可变值使用变异成员,而在其他链调用中则不能使用变异成员?

如何强制创建新的UIViewControllerRenatable|更新Make UIViewController上的视图

如何在设备(或常量)地址空间中创建缓冲区?

在表单中对齐文本框

应该在ViewModel还是ViewController中使用"Task {}"?

在 Swift 中将异步任务包装到 DispatchWorkItem 中以使其可取消?

类型擦除`AsyncMapSequence, Element>`

将弱引用作为类函数引用传递时,弱引用无法按预期工作

如何从 Swift 中隐藏 Objective-C 类接口的一部分?

如何在 AppDelegate for Cocoa macOS 中创建 mainMenu 和菜单项?

如何在 Combine 合并运算符的输出上使用 eraseToAnyPublisher

动画偏移正在 destruct 按钮 SwiftUI

SwiftUI View .tint(_ Color) 方法不起作用

SwiftUI 视图的默认成员初始化器 VS 自定义初始化器

从 Swift 列表中的行中检索值

如果没有标记,则为 Swift 预处理器

在 ViewController 的 UICollectionView 中拉取刷新

快速在 LLDB 中使用 po

在 Swift 中以编程方式更新约束的常量属性?

在 Swift 中从服务器播放视频文件