Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带下标的类Swift数组类行为_Ios_Arrays_Swift_Subscript - Fatal编程技术网

Ios 带下标的类Swift数组类行为

Ios 带下标的类Swift数组类行为,ios,arrays,swift,subscript,Ios,Arrays,Swift,Subscript,我实现了使用下标和返回对象的类,如下所示: class PlacesSet { ... subscript(i: Int) -> Place { get { return stored[i]; } set { stored[i] = newValue; } } } 但当我尝试在某个cocoa函数中将其作为数组传递时,它返回错误。 我应该实现一些协议和缺少的方法吗?一般来说,有可能这样做吗?

我实现了使用下标和返回对象的类,如下所示:

class PlacesSet {
  ...
  subscript(i: Int) -> Place {
      get {
          return stored[i];
      }
      set {
          stored[i] = newValue;
      }
  }
}
但当我尝试在某个cocoa函数中将其作为数组传递时,它返回错误。
我应该实现一些协议和缺少的方法吗?一般来说,有可能这样做吗?

实现一个下标并不会神奇地将一个类或结构转化为一个数组,因此您不能传递一个需要swift数组或
NSArray
PlaceSet
实例

您可以在类中实现一个方法,该方法返回
NSArray

func toArray() -> NSArray {
    ...
}
或者,如果您愿意,可以选择一处房产:

var asArray: NSArray { return ... }

如果你真的想让你的类表现得像一个
NSArray
,那么就把
PlaceSet
作为它的一个子类——但我不推荐这样做。swift数组也不能这样做,因为它是一个结构,因此不支持继承。

哪个错误?运行时还是编译?发布一个失败的代码示例,它说PlacesSet不是NSArray的类型,如果我添加:NSArray,我将得到“使用不兼容类型(Int)->Place重写索引下标”,它可能会工作,但是,当我向协议NSArray添加confirm类时,以及是否仍然存在实现asArray错误“使用不兼容的类型(Int)->Place覆盖索引下标”,因此我目前无法使用带下标的数组,但需要这两种行为。很抱歉,不清楚您的意思-请将错误发生的代码张贴在哪里,否则,如果我这样做,就无法找出代码中的错误:“mapKitView.addAnnotations”(navigation.places)“错误是它不是NSArray的子类型,即使使用asArray变量,但如果我将:NSArray添加到类中。错误是在下标行上“使用不兼容的类型(Int)->Place覆盖索引下标”,这没有多大帮助,因为我不知道navigation.places是什么