เห็นได้ชัดว่าคอมไพเลอร์คิดว่าNSSearchPathDirectory:0
เป็นอาร์เรย์และแน่นอนว่ามันต้องการประเภทNSSearchPathDirectory
แทน แน่นอนไม่ได้เป็นข้อผิดพลาดที่เป็นประโยชน์
แต่ด้วยเหตุผล:
ครั้งแรกที่คุณมีความสับสนชื่ออาร์กิวเมนต์และประเภท ลองดูที่นิยามฟังก์ชั่น:
func NSSearchPathForDirectoriesInDomains(
directory: NSSearchPathDirectory,
domainMask: NSSearchPathDomainMask,
expandTilde: Bool) -> AnyObject[]!
directory
และdomainMask
เป็นชื่อที่คุณใช้งานอยู่ แต่คุณควรทิ้งมันไว้เพื่อใช้ในการทำงาน พวกเขาจะใช้เป็นหลักในวิธีการ
- นอกจากนี้ Swift ยังพิมพ์อย่างรุนแรงดังนั้นคุณไม่ควรใช้ 0 ใช้ค่าของ enum แทน
- และในที่สุดก็ส่งคืนอาร์เรย์ไม่ใช่แค่เส้นทางเดียว
ดังนั้นนั่นทำให้เรามี (อัปเดตสำหรับ Swift 2.0):
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
และสำหรับ Swift 3:
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]