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


162

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

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

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

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

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

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

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


5
다음은 Swift 3에서 4 로의 변경 사항 에 대한 흥미로운 기사String 이며 SE0163
vadian

5
사용하려고 count대신.
holex

1
string.characters.forEach새 API를 사용 하는 경우string.forEach { char in process(char) }
Efren

답변:


270

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

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

예를 들어

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

답변 주셔서 감사합니다 .. 그러나 하위 문자열에 대한 자세한 참조를 할 수 있습니까? 이것은 단지 예제 일뿐입니다. 저는 캐릭터를 다루는 다른 많은 작업을 수행했습니다
Krunal

1
자세한 내용은 여기에서 확인하십시오. developer.apple.com/library/content/documentation/Swift/…
songxunzhao

인사말 = "안녕하세요, 세계!" let index = greeting.index (of : ",") ?? greeting.endIndex let
begin

1
하위 문자열에 대한 온라인 참조 .
Dennis Vennink

32
컬렉션이 비어 있는지 확인하기 위해 count> 0을 사용하지 마십시오. Collection에는 isEmpty라는 속성이 있습니다. 문서에서 컬렉션이 비어 있는지 확인해야하는 경우 count 속성이 0인지 확인하는 대신 isEmpty 속성을 사용하십시오. RandomAccessCollection을 준수하지 않는 컬렉션의 경우 count 속성에 액세스하면 컬렉션의 요소를 반복합니다.
Leo Dabus

82

스위프트 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

2
이것이 정답입니다. 문제는 string.characters.count의 대체에 관한 것이며 0과 비교하는 대체는 아닙니다. 스크린 샷에서만 언급됩니다.
Timothy Kanski 1

9

문자열을 조작하는 가장 일반적인 경우 중 하나는 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 ()

계산 문자



2

이 옵션을 사용 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

문자열의 첫 번째 문자를 가져 와서 let firstElement = spString.first 또는 Substring을 사용해야하는 방법을 알고 싶습니다.
Pulkit

1
@Pulkit .first문자열이 ""비어 있으면 사용하는 것이 좋습니다. nil 만 반환하지만 substring오류가 발생합니다.
Pranavan Sp

빠른 4 '. AuthorImageText = 문자열 (val.characters [(AuthorName.startIndex)]) 대문자'코드 줄을 변환하는 방법
Pulkit

@Pulkit 그냥 .characters충분히 제거
Pranavan Sp

0

{$ 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)

0

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

stringValue.characters.count에서 stringValue.count로

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.