编译失败:参数类型 'Character' 不符合预期的类型 'ExpressibleByStringLiteral'



我有这个代码:

private func validate(text: String) -> String {
let acceptableChar: Set<Character> = ["0", "9", "8", "7", "6", "5", "4", "3", "2", "1", "."]
//    let acceptableChar: [Character] = ["0", "9", "8", "7", "6", "5", "4", "3", "2", "1", "."]
var clearText = text
clearText.removeAll(where: { !acceptableChar.contains($0) })
return clearText
}

在每台设备(iPhone,iPad和Mac(的Xcode Version 11.3.1 (11C504)中都可以正常工作,但是在PreviewProvider中,我有此错误:

Compiling failed: argument type 'Character' does not conform to expected type 'ExpressibleByStringLiteral'
.....

error: argument type 'Character' does not conform to expected type 'ExpressibleByStringLiteral'
let acceptableChar: Set<Character> = [__designTimeString("#2775.[2].[0].value.[0].[0].value", fallback: "0"), __designTimeString("#2775.[2].[0].value.[1].[0].value", fallback: "9"), __designTimeString("#2775.[2].[0].value.[2].[0].value", fallback: "8"), __designTimeString("#2775.[2].[0].value.[3].[0].value", fallback: "7"), __designTimeString("#2775.[2].[0].value.[4].[0].value", fallback: "6"), __designTimeString("#2775.[2].[0].value.[5].[0].value", fallback: "5"), __designTimeString("#2775.[2].[0].value.[6].[0].value", fallback: "4"), __designTimeString("#2775.[2].[0].value.[7].[0].value", fallback: "3"), __designTimeString("#2775.[2].[0].value.[8].[0].value", fallback: "2"), __designTimeString("#2775.[2].[0].value.[9].[0].value", fallback: "1"), __designTimeString("#2775.[2].[0].value.[10].[0].value", fallback: ".")]

有人知道如何修改private func validate(text: String) -> String {以消除此错误吗?

使用以下声明

let acceptableChar = Set<Character>(arrayLiteral: 
"0", "9", "8", "7", "6", "5", "4", "3", "2", "1", ".")

经过测试和与Xcode 11.2/iOS 13.2配合使用

我做了一个小技巧,让它在Xcode 预览中工作

extension Character: ExpressibleByStringLiteral {
public init(stringLiteral value: StringLiteralType) {
self.init(value)
}
}

使用CharacterSet

import Foundation
func filter(_ input: String) -> String {
var allowed = CharacterSet.decimalDigits
allowed.insert(".")
return String(input.unicodeScalars.filter { allowed.contains($0) })
}
print(filter("a123123b123152345.1j123412340"))

如果你使用的是SwiftUI,这是一个简单的解决方案:

yourString.split(separator: Character(" "))

经过测试并使用 Xcode 11.5

最新更新