developer tip

Swift에서 Array [String] 슬라이싱 반환 유형이 [String]이 아닌 것 같습니다.

optionbox 2020. 9. 21. 07:37
반응형

Swift에서 Array [String] 슬라이싱 반환 유형이 [String]이 아닌 것 같습니다.


문자열 배열을 자르고 [String]변수로 설정하고 있지만 유형 검사기가 불평하고 있습니다. 가능한 컴파일러 버그입니까?

var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]

스크린 샷


범위로 배열을 첨자하면 배열이 아니라 슬라이스가 반환됩니다. 하지만 해당 슬라이스에서 배열을 만들 수 있습니다.

var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)

var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"

슬라이스의 새 배열을 얻기 위해 이렇게 할 수도 있습니다.

var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0])  //prints ["is", "cool"]

또 다른 방법은 한 장소에서 변수 선언을 결합이라고 할 수 있습니다 let someTags: [String]map(_:), 그 변환됩니다 ArraySlice<String>[String]:

let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]

변환하는 또 다른 편리한 방법 ArraySlice에는 Array이것이다 :

var tags = ["this", "is", "cool"] var someTags: [String] = tags[1..<3] + []

나중에 보는 다른 개발자 (또는 자신)가 그 목적을 이해하지 못할 수 있기 때문에 완벽하지 않습니다. 좋은 소식은 해당 개발자 (아마도 여러분)가 제거 + []하면 즉시 컴파일러 오류가 발생하여 목적을 명확히 할 수 있다는 것입니다.

참고 URL : https://stackoverflow.com/questions/25714673/in-swift-array-string-slicing-return-type-doesnt-seem-to-be-string

반응형