Компиляция не удалась: тип аргумента «Символ» не соответствует ожидаемому типу «ExpressibleByStringLiteral» - PullRequest
3 голосов
/ 26 января 2020

У меня есть этот код:

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
}

, который отлично работает в Xcode Version 11.3.1 (11C504) на каждом устройстве (iPhone, iPad и Ma c), но в 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 {, чтобы устранить эту ошибку?

Ответы [ 3 ]

1 голос
/ 26 января 2020

Используйте следующую декларацию

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

Протестировано и работало с Xcode 11.2 / iOS 13.2

0 голосов
/ 06 апреля 2020

Я сделал небольшой хак, который заставил его работать в Xcode Previews

extension Character: ExpressibleByStringLiteral {
    public init(stringLiteral value: StringLiteralType) {
        self.init(value)
    }
}
0 голосов
/ 28 января 2020

Используйте 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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...