【问题标题】:Turn simple variable into an array (Swift)将简单变量转换为数组(Swift)
【发布时间】:2018-04-08 22:47:47
【问题描述】:

我的 viewController var category : QCategoryy? 中有这个变量 我决定把它变成一个数组,所以我创建了这个:var categories: [QCategoryy?]? = [] 但在那之后我得到了像这样的所有错误

“'[QCategoryy?]' 类型的值没有成员 'name'”

在这一行self.title = categories?.name和其他类似的行。

为什么会出现这些错误,我该如何解决?

首先将 var 转换为数组效果很好。 这是 QCategoryy 的类

struct QCategoryy {
    var name:String
    var isSelected = false
    init(name:String) {
        self.name = name
    }
}

extension QCategoryy: ExpressibleByStringLiteral {
    init(stringLiteral value: String) {
        self.name = value
    }
    init(unicodeScalarLiteral value: String) {
        self.init(name: value)
    }
    init(extendedGraphemeClusterLiteral value: String) {
        self.init(name: value)
    }
} 

【问题讨论】:

  • 如果你有一个带有 optional 项的 optional 数组,那么获取 optional first例如,项目的名称类似于self.title = categories?.first??.name

标签: ios arrays swift xcode swift3


【解决方案1】:

很简单,您已经将该变量转换为数组。所以,首先你必须给出数组的索引来调用特定索引处的对象的值。 如下所示

for index in 0..<10 {
    if let category = categories[index] {
         self.title = category.name   
     }
  }

如果 categories[0] 为 nil,条件绑定将防止应用崩溃。

更新

防止数组索引在循环中越界。你可以使用下面的例子。

for category in categories {
    title = category.name
}

【讨论】:

  • 在条件状态下,我必须始终添加 [0] 作为数组的索引?
  • 不,这是数组的索引,检查更新的答案。
  • 应用程序因为这个错误“致命错误:索引超出范围”而崩溃,这可能是原因吗?
  • 您的数组索引与实际数组大小重叠。假设数组中只有 3 个对象,即 0,1 和 2。所以当它尝试搜索类别 [3] 或以上时。它会给你这个错误。
  • 因为我的数组可以包含的最大对象数为 10,最小 si 0(我使用步进器来选择对象数)
【解决方案2】:

这里 categories 是一个数组。所以做这样的事情

 self.title = categories?[0]?.name

【讨论】:

  • 我必须始终添加 [0] 作为数组的索引?
  • 您想访问哪个索引。这取决于你。
【解决方案3】:

现在是一个数组中的类别。因此,您必须引用它的某个对象,您所指的是您所指的名称。

更像,类别?[索引]?.name

【讨论】:

    【解决方案4】:

    或者你可以使用forEach:

    categories?.forEach{ value in
        self.title = value?.name           
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-18
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多