2015-05-03 19 views
5
let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String:String] 
    orch[appleId] 

lỗi trên dòng orch[appleId] với:Không thể chỉ định giá trị của loại '[Chuỗi: Chuỗi]?' với một chỉ số của loại 'String'

Không thể subscript một giá trị kiểu '? [String: Chuỗi] với chỉ mục loại 'Chuỗi'

TẠI SAO?

Câu hỏi # 2:

let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as! [String:[String:String]] 
    orch[appleId] = ["type":"fuji"] 

lỗi với: "Không thể gán kết quả của biểu thức này"

+1

bản sao có thể có của [Không thể chỉ định giá trị của loại '\ [NSObject: AnyObject \]?' với chỉ mục thuộc loại 'Chuỗi'] (http://stackoverflow.com/questions/29994541/cannot-subscript-a-value-of-type-nsobject-anyobject-with-an-index-of-type) –

Trả lời

15

Lỗi này là bởi vì bạn đang cố gắng sử dụng subscript trên một giá trị tùy chọn. Bạn đang truyền tới [String: String] nhưng bạn đang sử dụng biểu mẫu có điều kiện của toán tử truyền (as?). Từ tài liệu:

Biểu mẫu này của nhà điều hành sẽ luôn trả về giá trị tùy chọn và giá trị sẽ là không nếu không thể thực hiện được. Điều này cho phép bạn kiểm tra xem có thành công không.

Do đó orch thuộc loại [String: String]?. Để giải quyết điều này, bạn cần phải:

1. sử dụng as! nếu bạn biết chắc chắn kiểu trả về là [String: String]:

// You should check to see if a value exists for `orch_array` first. 
if let dict: AnyObject = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] { 
    // Then force downcast. 
    let orch = dict as! [String: String] 
    orch[appleId] // No error 
} 

2. Sử dụng tùy chọn ràng buộc để kiểm tra xem orchnil:

if let orch = NSUserDefaults().dictionaryForKey("orch_array")?[orchId] as? [String: String] { 
    orch[appleId] // No error 
} 

Hy vọng điều đó sẽ hữu ích.

+0

@ abakersmith Cảm ơn bạn, và bây giờ, nếu tôi nhận được một chút phức tạp hơn, tại sao tôi không thể [orchId]! [String: [String: String] và sau đó nó sẽ không cho phép tôi orch ["id"] = ["type": "fuji"] – hunterp

+0

Bạn có thể đăng bài đó dưới dạng bản chỉnh sửa cho câu hỏi của mình không? Đó là một chút khó khăn để theo dõi mà không cần định dạng thích hợp. – ABakerSmith

+0

@ABakerSmith DONE – hunterp

Các vấn đề liên quan