2016-03-21 76 views
6

我得到的错误“类型‘船舶’有没有下的成员,当我尝试做:类型没有下标成员?

var coor = ship[index] 

我试图做

var coor = ship?[index] as? Coordinate 

但我得到这个错误:”不能使用可选的链接在类型的非可选值“船舶””

这里是我的Ship类:

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") 
    } 
} 

Coordinate类也是类型NSObject, NSCoding等... 对象似乎在我加载它们时(从NSUserDefaults)在数组中?我怎么把它们弄出来?

+1

你想'ship.shipCoors?[index]' – dan

+0

谢谢大家,能解决问题! –

+0

你的'count'属性getter可以是'return shipCoors?.count ?? 0'顺便说一句。 – dan

回答

8

添加标到你Ship对象返回一个可选Coordinate

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

shipCoors被声明为[Coordinate]?(可选数组),所以Ship将不会有shipCoors中的数组。在这种情况下,我将返回nil,但您可以返回任何您想要的东西。

5

也有类似的问题斯威夫特3

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

对我来说,这是不加括号的一个简单的例子函数调用“()”。学校男孩错误。

即下面的代码是罪魁祸首

dataModel.myFunction 

解决了dataModel.myFunction()

0

对于我的代码:

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

    } 
    return intArray 
} 

我收到以下错误:

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

这意味着append函数不使用下标或[]

改变

intArray.append[n] 

行至:

intArray.append(n) 

将解决整个问题!

相关问题