[swift] Swift 4에서 문자열 슬라이싱 첨자를 어떻게 사용합니까?

Swift 3으로 작성된 다음과 같은 간단한 코드가 있습니다.

let str = "Hello, playground"
let index = str.index(of: ",")!
let newStr = str.substring(to: index)

Xcode 9 베타 5에서 다음 경고가 표시됩니다.

substring(to:)‘는 사용되지 않습니다. String‘partial range from’연산자와 함께 슬라이싱 아래 첨자를 사용하십시오 .

Swift 4 에서 부분 범위가 있는 이 슬라이싱 첨자를 어떻게 사용할 수 있습니까?



답변

당신은해야 빈 한쪽을 떠나 , 따라서 이름 “부분 범위를”.

let newStr = str[..<index]

연산자의 부분 범위도 마찬가지입니다 . 다른 쪽은 비워 두십시오.

let newStr = str[index...]

이 범위 연산자는을 반환합니다 Substring. 문자열로 변환하려면 String의 초기화 함수를 사용하십시오.

let newStr = String(str[..<index])

새 하위 문자열에 대한 자세한 내용은 여기를 참조하십시오 .


답변

하위 문자열 (Swift 3)을 문자열 슬라이싱 (Swift 4)으로 변환

스위프트 3, 4의 예 :

let newStr = str.substring(to: index) // Swift 3
let newStr = String(str[..<index]) // Swift 4

let newStr = str.substring(from: index) // Swift 3
let newStr = String(str[index...]) // Swift 4 

let range = firstIndex..<secondIndex // If you have a range
let newStr = = str.substring(with: range) // Swift 3
let newStr = String(str[range])  // Swift 4


답변

스위프트 5, 4

용법

let text = "Hello world"
text[0] // H
text[...3] // "Hell"
text[6..<text.count] // world
text[NSRange(location: 6, length: 3)] // wor

암호

import Foundation

public extension String {
  subscript(value: Int) -> Character {
    self[index(at: value)]
  }
}

public extension String {
  subscript(value: NSRange) -> Substring {
    self[value.lowerBound..<value.upperBound]
  }
}

public extension String {
  subscript(value: CountableClosedRange<Int>) -> Substring {
    self[index(at: value.lowerBound)...index(at: value.upperBound)]
  }

  subscript(value: CountableRange<Int>) -> Substring {
    self[index(at: value.lowerBound)..<index(at: value.upperBound)]
  }

  subscript(value: PartialRangeUpTo<Int>) -> Substring {
    self[..<index(at: value.upperBound)]
  }

  subscript(value: PartialRangeThrough<Int>) -> Substring {
    self[...index(at: value.upperBound)]
  }

  subscript(value: PartialRangeFrom<Int>) -> Substring {
    self[index(at: value.lowerBound)...]
  }
}

private extension String {
  func index(at offset: Int) -> String.Index {
    index(startIndex, offsetBy: offset)
  }
}


답변

Swift 4/5에서 더 짧음 :

var string = "123456"
string = String(string.prefix(3)) //"123"
string = String(string.suffix(3)) //"456"


답변

코드를 Swift 4로 변환하는 방법은 다음과 같습니다.

let str = "Hello, playground"
let index = str.index(of: ",")!
let substr = str.prefix(upTo: index)

아래 코드를 사용하여 새 문자열을 만들 수 있습니다.

let newString = String(str.prefix(upTo: index))


답변

(상기 : 인덱스) 부분 문자열 로 변환 … 인덱스]

샘플 확인

let text = "1234567890"
let index = text.index(text.startIndex, offsetBy: 3)

text.substring(from: index) // "4567890"   [Swift 3]
String(text[index...])      // "4567890"   [Swift 4]


답변

스위프트 5

(자바의 하위 문자열 방법) :

extension String {
    func subString(from: Int, to: Int) -> String {
       let startIndex = self.index(self.startIndex, offsetBy: from)
       let endIndex = self.index(self.startIndex, offsetBy: to)
       return String(self[startIndex...endIndex])
    }
}

용법:

var str = "Hello, Nick Michaels"
print(str.subString(from:7,to:20))
// print Nick Michaels