문자열 배열을 자르고 [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 someTags = tags[1..<3] var someTagsArray: [String] = someTags
그것은 당신에게 더 많은 도움을 제공합니다error: 'Slice<String>' is not convertible to '[String]'
변환하는 또 다른 편리한 방법 ArraySlice
에는 Array
이것이다 :
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
나중에 보는 다른 개발자 (또는 자신)가 그 목적을 이해하지 못할 수 있기 때문에 완벽하지 않습니다. 좋은 소식은 그 개발자 (아마도 당신이)를 제거 + []
하면 즉시 컴파일러 오류가 발생하여 목적을 명확히 할 수 있다는 것입니다.
슬라이스가 생성 될 때 슬라이스를 배열로 캐스팅합니다. 중간 변수를 사용하지 않고 배열을 배열로 유지합니다. 이것은 Codable 유형을 사용할 때 잘 작동합니다.
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
문서화 된 곳은 어디 입니까? 또한 오류 메시지가 올바르지Slice
않고 플레이 그라운드에서 [String]으로 표시됩니다. 따라서 두 가지 컴파일러 오류와 누락 된 문서가있는 것 같습니다.