Rõ ràng, trình biên dịch nghĩ NSSearchPathDirectory:0là một mảng, và tất nhiên nó mong đợi kiểu NSSearchPathDirectorythay thế. Chắc chắn không phải là một thông báo lỗi hữu ích.
Nhưng như lý do:
Đầu tiên, bạn đang nhầm lẫn giữa các tên và kiểu đối số. Hãy xem định nghĩa hàm:
func NSSearchPathForDirectoriesInDomains(
directory: NSSearchPathDirectory,
domainMask: NSSearchPathDomainMask,
expandTilde: Bool) -> AnyObject[]!
directoryvà domainMasklà tên, bạn đang sử dụng các loại, nhưng dù sao bạn cũng nên để chúng ra cho các chức năng. Chúng được sử dụng chủ yếu trong các phương pháp.
- Ngoài ra, Swift được gõ mạnh, vì vậy bạn không nên sử dụng 0. Thay vào đó hãy sử dụng giá trị của enum.
- Và cuối cùng, nó trả về một mảng, không chỉ là một đường dẫn.
Vì vậy, điều đó cho chúng tôi (cập nhật cho Swift 2.0):
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
và cho Swift 3:
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]