arrays - 快速切换转换时出错

标签 arrays swift loops switch-statement

我有数组数组 - var days: [[Int]] = [[1], [1,2,3], [7]] 我想通过 StringInt 转换为名称并将其添加到新数组 arrayOfStringDays 中。我的代码:

var days: [[Int]] = [[1], [1,2,3], [7]]    
var arrayOfStringDays = [[String]]() 

            for i in 0..<days.count {

                switch days[i] {
                    case [1]:
                        arrayOfStringDays.append(["one"])
                    case [1,2,3]:
                        arrayOfStringDays.append(["one, two, three"])
                    case [7]:
                        arrayOfStringDays.append(["seven"])
                    default:
                        break
                } 
            }

但我在每个案例附近都看到了错误:

Expression pattern of type '[Int]' cannot match values of type '[Int]'

我的错误是什么?谢谢!

最佳答案

更新条件一致性已在 Swift 4.1 中实现, 特别是数组(和其他一些集合类型)符合 到 Equatable 如果他们的元素是。

您的代码现在可以在 Xcode 9.3 中正常编译。


switch 语句使用“模式匹配”运算符

public func ~=<T : Equatable>(a: T, b: T) -> Bool

将给定值与各种情况进行比较。 问题是 Array 不符合 Equatable,即使数组元素是 Equatable。 (这将随着 Swift 4 而改变,请参阅 SE-0143 Conditional conformances .)

我可以建议一个不同的解决方案吗? 用于转换嵌套数组的嵌套 map 和数字格式化程序 使用“拼写”样式将数字转换为单词:

let days: [[Int]] = [[1], [1,2,3], [7]]

let formatter = NumberFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.numberStyle = .spellOut

let arrayOfStringDays = days.map {
    $0.map { formatter.string(from: $0 as NSNumber) ?? String($0) }
}

print(arrayOfStringDays)
// [["one"], ["one", "two", "three"], ["seven"]]

您还可以将格式化程序区域设置为不同的语言, 或使用默认值获取用户默认的结果 语言。示例:

formatter.locale = Locale(identifier: "ru")
// ...
print(arrayOfStringDays)
// [["один"], ["один", "два", "три"], ["семь"]]

关于arrays - 快速切换转换时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41359984/

相关文章:

PHP 关联数组变量赋值

c++ - 我的程序出现 abort() 错误,但由于它是程序的加载部分,我无法调试它?

swift - 字符串数组中的字符swift

swift - 为数组中的项目赋值给出条件绑定(bind)中的绑定(bind)值必须是可选类型

c# - 如何遍历字典?

python - 在 python 中处理大尺寸数组

c++ - 如何在 char 数组中分配特定数量的字节 - 内存管理

swift - 我如何使用 CGAffineTransform 进行正确的拖放

java - 线程内调用的函数中的无限循环会导致线程保持 Activity 状态

javascript - 我想写javascript代码来获得加法倒计时