[ios] 경고 : ‘characters’는 더 이상 사용되지 않습니다 : String 또는 Substring을 직접 사용하십시오

characters -String의 인스턴스 속성은 Xcode 9.1 에서 사용되지 않습니다.

characters속성 을 사용하여 String에서 하위 문자열을 얻는 것이 매우 유용 했지만 이제는 더 이상 사용되지 않으며 Xcode는 사용을 제안합니다 substring. 나는 SO 질문과 애플 개발자 튜토리얼 / 지침을 확인하려고 노력했다. 그러나 제안 된 해결책 / 대체를 볼 수 없었습니다.

경고 메시지는 다음과 같습니다.

‘문자’는 사용되지 않습니다. 문자열 또는 하위 문자열을 사용하십시오

여기에 이미지 설명을 입력하십시오

property를 사용하여 많은 문자열 작업을 수행 / 처리했습니다 characters.

이 업데이트에 대한 아이디어 나 정보가 있습니까?



답변

Swift 4는 문자열 API에 대한 변경 사항을 도입했습니다.
대신에
사용할 수 있습니다!stringValue.isEmptystringValue.characters.count > 0

자세한 내용은 여기 에서 샘플을 얻으 십시오.

예를 들어

let edit = "Summary"
edit.count   // 7


답변

스위프트 4 vs 스위프트 3 예제 :

let myString = "test"

for char in myString.characters {print(char) } // Swift 3
for char in myString { print(char) } // Swift 4

let length = myString.characters.count // Swift 3
let length = myString.count // Swift 4


답변

문자열을 조작하는 가장 일반적인 경우 중 하나는 JSON 응답입니다. 이 예에서는 Bitcoin JSON 객체의 마지막 문자 (n)를 삭제하기 위해 시계 앱에서 확장을 만들었습니다.

스위프트 3 :

func dropLast(_ n: Int = 0) -> String {
    return String(characters.dropLast(n))

Xcode 9.1 오류 메시지 :

‘문자’는 사용되지 않습니다. 문자열 또는 하위 문자열을 직접 사용하십시오

Xcode는 문자열 변수 나 메소드를 직접 사용하도록 지시하고 있습니다 .

스위프트 4 :

func dropLast(_ n: Int = 0) -> String {
    return String(dropLast(n))
    }

완벽한 확장 :

extension String {
    func dropLast(_ n: Int = 0) -> String {
        return String(dropLast(n))
    }

    var dropLast: String {
        return dropLast()
    }
}

요구:

print("rate:\(response.USDRate)")
let literalMarketPrice = response.USDRate.dropLast(2)
print("literal market price: \(literalMarketPrice)")

콘솔:

//rate:7,101.0888 //JSON float
//literal market price: 7,101.08 // JSON string literal

추가 예 :

  • print("Spell has \(invisibleSpellName.count) characters.")
  • return String(dropLast(n))
  • return String(removeLast(n))

선적 서류 비치:

당신은 종종 같은 일반적인 방법을 사용할 것 dropLast()또는 removeLast()count그래서 여기에 각 방법에 대한 명시적인 애플 문서입니다.

droplast ()

removelast ()

계산 문자


답변

그 경고는 빙산의 정상 일뿐입니다. 문자열 변경이 많이 있었고 문자열은 다시 문자 모음입니다. 그러나 우리는 새롭고 멋진 하위 문자열을 얻었습니다 🙂

https://useyourloaf.com/blog/updating-strings-for-swift-4/에 대한 좋은 글입니다.


답변

이 옵션을 사용 characters하기 때문에 String스위프트 2.0 수집되는 멈췄다. 그러나이 스위프트 4 여전히 유효 코드입니다하지만 지금은 더 이상 필요 StringA는 Collection다시.

예를 들어 Swift 4 String에는 문자 수를 제공하는 직접 카운트 속성이 있습니다.

// Swift 4
let spString = "Stack"
spString.count           // 5

문자열 및 하위 문자열의 예

Swift 4는 String이제 String의 첫 문자를 제공하는 Element를 직접 얻습니다.(string.characters.first)

let spString = "Stack"
let firstElement = spString.first   //S

하위 문자열

SubString을 사용하면 첫 문자를 얻습니다.

let spstring = "Welcome"
let indexStartOfText = spstring.index(spstring.startIndex, offsetBy: 1)
let sub = spstring.substring(to: indexStartOfText)
print(sub) //W


답변

{$ 0.characters.first!를 사용하지 않고 사전 그룹화에이 코드를 사용할 수도 있습니다. }.

let cities = ["Shanghai": 24_256_800, "Karachi": 23_500_000, "Beijing": 21_516_000, "Seoul": 9_995_000]
let groupedCities = Dictionary(grouping: cities.keys) { $0.first! }
print(groupedCities)


답변

문자를 제거하십시오. 예를 들면 다음과 같습니다.

stringValue.characters.count에서 stringValue.count로