2015-04-26 14 views
22

Đây là một lớp mở rộng PFQueryTableViewController và tôi nhận được lỗi sau. Các hàng sẽ chỉ là PFUser.
Tại sao tôi không thể truyền? Có cách nào để giái quyết vấn đề này không?Không thể chỉ định giá trị của [AnyObject]? với chỉ mục kiểu Int

Lỗi này là:

Cannot subscript a value of [AnyObject]? with an index of type Int 

... cho dòng này:

var user2 = self.objects[indexPath.row] as! PFUser 

enter image description here

Trả lời

52

Vấn đề không phải là diễn viên, nhưng thực tế là self.objects có vẻ là một mảng không bắt buộc: [AnyObject]?.
Do đó, nếu bạn muốn truy cập một trong những giá trị của nó thông qua một số phụ, bạn phải unwrap mảng đầu tiên:

var user2: PFUser 
if let userObject = self.objects?[indexPath.row] { 
    user2 = userObject as! PFUser 
} else { 
    //handle the case of 'self.objects' being 'nil' 
} 

self.objects?[indexPath.row] sử dụng optional chaining đầu tiên unwrap self.objects, và sau đó gọi nó là subscript.


Tính Swift 2, bạn cũng có thể sử dụng guard statement:

var user2: PFUser 
guard let userObject = self.objects?[indexPath.row] else { 
    //handle the case of 'self.objects' being 'nil' and exit the current scope 
} 
user2 = userObject as! PFUser 
3

workaround của tôi sẽ được ..

  1. Nếu bạn chắc chắn rằng tableview sẽ chỉ chứa người dùng cố gắng định kiểu các đối tượng Mảng của AnyObject thành mảng của PFUser. sau đó sử dụng nó.
+0

vẫn còn lỗi, nhưng điều này làm việc, không chắc chắn lý do tại sao: 'var user2 = self.objects! [IndexPath.row] as! PFUser' – user1406716

+0

Vì các đối tượng Mảng là tùy chọn [AnyObject]? – Amit89

+0

có. Cảm ơn sự giúp đỡ của bạn. – user1406716

5

Tôi chạy vào cùng một vấn đề và giải quyết nó như thế này:

let scope : String = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] as! String 

Đối với trường hợp của bạn, bạn có thể làm:

var user2 : PFUser = self.objects![indexPath.row] as! PFUser 
1

Chỉ cần thêm một! (Chấm than đánh dấu) sau khi các đối tượng, như vậy:

var user2 = self.objects![indexPath.row] as! PFUser 

Đó cố định nó cho tôi :)

0

Tôi đã có một vấn đề tương tự với dòng sau:

array![row] 

Tôi không thể hiểu ở đâu vấn đề đến từ; nếu tôi thay thế row bằng một số như 1 mã được biên dịch và chạy mà không có bất kỳ sự cố nào.

Sau đó, tôi đã có ý nghĩ hạnh phúc của việc thay đổi nó như thế này:

array![Int(row)] 

Và nó làm việc. Đối với cuộc sống của tôi, tôi không hiểu tại sao cho một mảng một chỉ số của -1 là về mặt lý thuyết hợp pháp, nhưng có bạn đi. Điều đó có ý nghĩa đối với tôi vì các bản đăng ký không được ký, nhưng có lẽ đó chỉ là tôi; Tôi sẽ phải hỏi Chris về nó.

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