Tôi đang cắt một mảng các chuỗi và đặt nó thành một [String]
biến, nhưng trình kiểm tra kiểu đang phàn nàn. Nó có thể là một lỗi trình biên dịch?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Câu trả lời:
Đăng ký một mảng với một phạm vi không trả về một mảng mà là một lát cắt. Tuy nhiên, bạn có thể tạo một mảng từ lát cắt đó.
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
nó mang lại cho bạn những hữu ích hơnerror: 'Slice<String>' is not convertible to '[String]'
Một cách khác để làm điều đó ở một nơi là kết hợp khai báo biến let someTags: [String]
và map(_:)
điều đó sẽ chuyển ArraySlice<String>
thành [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
Một cách thuận tiện khác để chuyển đổi một ArraySlice
thành Array
là:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
Nó không hoàn hảo vì một nhà phát triển khác (hoặc chính bạn) sau này nhìn vào nó có thể không hiểu mục đích của nó. Tin tốt là nếu nhà phát triển đó (có thể là bạn) loại bỏ + []
chúng, họ sẽ ngay lập tức gặp lỗi trình biên dịch, hy vọng sẽ làm rõ mục đích của nó.
Chỉ ép lát cắt dưới dạng Mảng khi nó được tạo. Giữ Mảng của bạn dưới dạng một mảng mà không cần phải sử dụng biến trung gian. Điều này hoạt động tốt khi sử dụng các loại Codable.
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
tài liệu ở đâu? Ngoài ra, thông báo lỗi không chính xác vàSlice
hiển thị dưới dạng [Chuỗi] trong sân chơi. Vì vậy, có vẻ như có hai lỗi trình biên dịch và tài liệu bị thiếu.