2016-01-25 20 views
21

Tôi mới sử dụng mã hóa và đã chọn một số dự án nguồn mở để có ý tưởng. Hy vọng các bạn có thể giúp tôi khắc phục điều đóSWIFT ERROR Tham chiếu mơ hồ đến 'subscript' của thành viên

let pictures = (selectedRestaurant["Pictures"] as! NSArray) //Here's where i get the error 

    let picture = (pictures[zoomedPhotoIndex] as! NSDictionary) 

    let pictureURL = picture["url"] as! String 

    let imageURL = NSURL(string: pictureURL) 
    let urlRequest = NSURLRequest(URL: imageURL!) 
    NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) { 
     response, data, error in 
     if error == nil && data != nil { 

      self.imageView.image = UIImage(data: data!) 
      self.imageView.contentMode = UIViewContentMode.ScaleAspectFit 

     } 
    } 

} 

} 
+0

Chỉ cho chúng tôi cách 'selectedRestaurant' được khai báo và loại đó là gì. – Moritz

+2

Cách 'selectedRestaurant' được khai báo? Từ đoạn mã bạn đã đăng, chúng tôi không biết loại và/hoặc dữ liệu mà bạn lưu trữ trong biến đó. Ngoài ra, phần còn lại của mã của bạn, nơi bạn tải hình ảnh từ URL, không có bất kỳ chỉ số nào. –

Trả lời

1

Điều đó có nghĩa là "Ảnh" không phải là một chỉ số hợp lệ. Có vẻ như bạn đang tạo một hằng số có tên là pictures và bạn đang cố gán giá trị đó là selectedRestaraunt["Pictures"] và sau đó cố gắng truyền nó thành một NSArray. Nếu selectedrestaraunt đã là một mảng, thì những gì nằm trong ngoặc đơn [] sau selectedRestaraunt phải là một giá trị số nguyên sẽ tham chiếu đến chỉ mục trong mảng selectedRestaraunt. Obviosuly "Hình ảnh" không phải là một số nguyên, nó là một chuỗi.

Nếu bạn đang cố gắng truy cập một mảng trong một mảng. Nghĩa là Pictures là một mảng lưu trữ trong mảng selectedRestaraunt sau đó bạn có thể truy cập nó bằng cách sử dụng selectedRestaraunt[index of Pictures array] nơi [index of pictures array] là một số nguyên tương đương với số lượng chỉ số trong đó mảng Picutres cư trú trong mảng selectedRestaraunt

0

Như Eric và Eugene đề cập trong nhận xét của họ, không thể xem xét vấn đề bạn đang gặp phải mà không biết loại selectedRestaurant. Đó là sau khi tất cả lý do tại sao bạn nhận được lỗi mơ hồ trình biên dịch.

Tôi phải kính trọng không đồng ý với MikeG. Vấn đề không phải là một trong số các chỉ số hợp lệ. Bạn sẽ nhận được loại lỗi đó, ví dụ: bạn có loại selectedRestaurant[NSNumber:AnyObject], trong đó Chuỗi rõ ràng không còn hợp lệ nữa vì khóa từ điển chỉ có thể là một số NSNumber.

9

Đối với tôi, câu trả lời là đặc biệt nêu rõ loại mảng Tôi đã đúc để:

if let foo = dictionary["bar"] as? [String] 
+1

Đây cũng là những gì tôi cần. Cảm ơn! – mondousage

13

Chỉ cần xác định rõ ràng các loại pictures là gì:

Vì vậy, thay vì:

let pictures = selectedRestaurant["Pictures"] as! NSArray 

Viết:

let pictures: NSArray = selectedRestaurant["Pictures"] as! NSArray 
0

Tôi quản lý để có được lỗi này một cách hơi kỳ lạ. Tôi đã có mã như thế này:

 cell.textLabel = anArrayOfStrings[indexPath.item].uppercased() 

Và tôi đã bối rối vì sao nó không thể nhận ra rằng đây là một mảng, mặc dù tôi đã tuyên bố rõ ràng loại của nó. Tôi đã phá vỡ dòng trong hai và cuối cùng nhận được một thông báo lỗi hữu ích:

 let name = anArrayOfStrings[indexPath.item].uppercased() 
     cell.textLabel = name 

Tôi đã cố gắng để gán một String để một UILabel, nhưng bằng cách nào đó điểm mà tại đó động cơ suy luận kiểu thất bại là ở chỉ số dưới.

Vì vậy, lời khuyên của tôi đối với bất cứ ai bị bối rối bởi điều này là cố gắng chia nhỏ câu nói của bạn thành những mẩu có kích thước nhỏ gọn mà công cụ suy luận loại Swift có thể dễ tiêu hóa hơn.

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