2016-03-21 29 views
6

tôi nhận được lỗi "Type 'tàu' không có thành viên subscript khi tôi cố gắng để làm:Loại Không có thành viên đăng ký?

var coor = ship[index] 

tôi đã cố gắng để làm

var coor = ship?[index] as? Coordinate 

Nhưng tôi nhận được lỗi này:" Không thể sử dụng chain tùy chọn trên giá trị không bắt buộc của loại 'tàu'"

Dưới đây là Ship lớp học của tôi:

import Foundation 

class Ship: NSObject, NSCoding { 

    var shipCoors: [Coordinate]? 

    var count: Int { 
     var count = 0 
     for _ in shipCoors! { 
      count++ 
     } 
     return count 
    } 

    init(shipCoors: [Coordinate]) { 
     self.shipCoors = shipCoors 
    } 

    required init(coder decoder: NSCoder) { 
     self.shipCoors = decoder.decodeObjectForKey("shipCoors") as? [Coordinate] 
    } 

    func encodeWithCoder(coder: NSCoder) { 
     coder.encodeObject(shipCoors, forKey: "shipCoors") 
    } 
} 

Lớp Coordinate cũng thuộc loại NSObject, NSCoding, v.v ... Các đối tượng dường như nằm trong mảng khi tôi tải chúng (từ NSUserDefaults)? Làm thế nào để tôi lấy chúng ra ?!

+1

Bạn muốn 'ship.shipCoors?[index] ' – dan

+0

Cảm ơn mọi người, đã có thể giải quyết vấn đề! –

+0

Thuộc tính 'count' getter của bạn chỉ có thể là' return shipCoors? .count ?? 0' btw. – dan

Trả lời

8

Thêm một subscript để đối tượng Ship của bạn để trả lại một tùy chọn Coordinate:

subscript(index: Int) -> Coordinate? { 
    guard let coordinate = shipCoors?[index] else { 
     return nil 
    } 
    return coordinate 
} 

shipCoors được khai báo là [Coordinate]? (một mảng tùy chọn), do đó, rủi ro là Ship sẽ không có mảng trong shipCoors. Trong trường hợp này, tôi trả lại nil, nhưng bạn có thể trả lại bất kỳ thứ gì bạn muốn thay thế.

5

Đã vấn đề tương tự trong Swift 3

Type '() -> [myObject]' has no subscript members 

Trong trường hợp của tôi, Đó là một trường hợp đơn giản của việc không thêm dấu ngoặc để chức năng-gọi "()". cậu học sinh lỗi.

ví dụ: mã dưới đây là thủ phạm

dataModel.myFunction 

giải quyết với dataModel.myFunction()

0

Đối với mã của tôi:

func takeN(_ numbers: Int...) -> [Int]{ 
    var intArray : [Int] = [] 
    for n in numbers{ 
     intArray.append[n] 

    } 
    return intArray 
} 

tôi đã nhận được các lỗi sau:

error: type '(Int) ->()' has no subscript members intArray.append[n]

Điều này có nghĩa là chức năng append không sử dụng các bảng con hoặc []!

thay đổi dòng

intArray.append[n] 

tới:

intArray.append(n) 

sẽ giải quyết toàn bộ vấn đề!

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