2014-06-28 17 views
19

Tested này từ tài liệu tham khảo: https://developer.apple.com/documentation/swiftLiệu Swift init (count :, repeatValue :) có hoạt động không?

var string = String(count: 5, repeatedValue: "a") 
// string is "aaaaa" 

Tôi đã nhận lỗi này:

Playground execution failed: error: :5:14: error: could not find an overload for 'init' that accepts the supplied arguments var string = String(count: 5, repeatedValue: "a")

Điều này thực sự làm việc?

Trả lời

25

Dường như bạn phải chuyển rõ ràng một loại Ký tự để nó hoạt động. Điều này làm việc cho tôi.

let char = Character("a") 
let string = String(count: 5, repeatedValue: char) 

Mặc dù, cũng có thể có lỗi được trộn lẫn với tất cả điều này. Tôi tin rằng cách bạn đã làm điều này nên đã làm việc trên riêng của mình. Và tôi dường như không thể hoàn thành mã trên bộ khởi tạo này.

Chỉnh sửa: Tôi sẽ gặp lỗi. Sau đây biên dịch tốt.

let array = Array(count: 5, repeatedValue: "a") 
+1

Công trình này! Thật lạ lùng khi Swift Reference Guide có một sai lầm lớn như vậy. –

+0

Có vẻ như repeatValue phải là một kiểu ký tự, nhưng không có cách nào rõ ràng để tạo ký tự chữ trong Swift (trong C, bạn sẽ sử dụng dấu ngoặc kép chứ không phải dấu ngoặc kép.) –

+2

Hướng dẫn không bị hỏng, công cụ suy luận kiểu Là. Subscripting là một ví dụ điển hình mà nó rơi phẳng trên khuôn mặt của nó mặc dù có các loại thực sự rõ ràng. – CodaFi

6

này chỉ hoạt động tốt:

var str9 = String(count: 5,repeatedValue: Character("c")) 
+3

Có, nhưng về cơ bản là câu trả lời giống như trên. –

0

Tôi biết đây là một câu hỏi cũ và đã có một câu trả lời. Tuy nhiên, tôi nghĩ rằng tôi biết lý do tại saoString(count: 5, repeatedValue: "a") không hoạt động.

Vấn đề là String có hai tương tự như tìm initialisers:

init(count: Int, repeatedValue: Character) 
init(count: Int, repeatedValue: UnicodeScalar) 

Vì vậy, trong trường hợp này trình biên dịch có thể không nói cho dù một chữ là một Character hoặc UnicodeScalar, do đó biên dịch lỗi thời gian nếu bạn không vượt qua rõ ràng Character. Để xác nhận rằng "a" thể được hiểu là UnicodeScalar bạn có thể kiểm tra xem dòng này biên dịch:

let a: UnicodeScalar = "a" 
7

Đối với lợi ích của người tìm kiếm trong tương lai: như của Swift 3, sử dụng init(repeating:count:).

+0

Rất may, bộ khởi tạo được cập nhật này cũng chấp nhận các chuỗi thay vì ký tự. – mklbtz

0

Swift 3:

var array = Array(repeating: 0, count: 5) 

Output: [0, 0, 0, 0, 0]

1

Đối với bất cứ ai trong 3.x nhanh chóng hiện nay của nó một cái gì đó như thế này này sẽ làm việc như một quyến rũ.

var string = String(repeating: "a", count: 5) 
Các vấn đề liên quan