首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速处理稀疏数组

快速处理稀疏数组
EN

Stack Overflow用户
提问于 2014-07-03 15:20:17
回答 2查看 2.3K关注 0票数 2

我试图在Swift中创建一个稀疏数组。我不确定问题是在我的声明中(没有检测到语法错误)还是测试版2中可能有错误?

我试图将一个由24个类实例组成的数组声明为选项。然后,我可以在必要时填充数组的插槽。以下是宣言:

代码语言:javascript
复制
var usage = WaterUsage?[](count:24, repeatedValue:nil)

这通过Xcode 6 beta 2编译器没有错误。其目的是最终得到一个由24个"WaterUsage“类组成的数组,所有这些类都设置为零。

当我试图设置数组元素时:

代码语言:javascript
复制
usage[hour] = usage

当小时小于24小时时,我得到了错误:

"WaterUsage没有一个名为下标的成员“

我也尝试过使用泛型,但这似乎也不起作用。

我发现在复杂数据结构中使用选项的Swift语法有点模糊,这里可能需要一些建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-03 15:32:26

定义数组的方法是为您提供一个可选的可选值数组( WaterUsage?[]? ),在您使用它之前,必须将其展开。我认为您只希望值是可选的:WaterUsage?[]。我能够做到这一点的一种方法是使用通用的Array语法:

代码语言:javascript
复制
var usage: WaterUsage?[] = Array<WaterUsage?>(count:24, repeatedValue:nil)
usage[hour] = something

另一种方法是强制展开初始声明的返回值。我不知道为什么,但是WaterUsage?[]()有一个可选的返回值。

代码语言:javascript
复制
var usage = (WaterUsage?[](count:24, repeatedValue:nil))!
usage[hour] = something
票数 4
EN

Stack Overflow用户

发布于 2014-07-03 16:25:01

你离我很近!当对数组使用MemberType[]语法糖时,您编写它的方式(WaterUsage?[])实际上将数组声明为可选的,以及它所保存的值。在这种情况下,要将值赋值给索引,首先需要使用以下方法展开Array:

usage![hour] = someWaterUsage

但是,如果您只希望数组中的可选成员(并且不希望Array本身是可选的),那么您可以返回到标准Array声明:

var usage = Array<WaterUsage?>(count:24, repeatedValue:nil)

编辑:

我最初还提供了另一种解决方案的替代语法:

var usage = (WaterUsage?)[](count:24, repeatedValue:nil)

在这样做时,根据@Nate的观察结果,您需要使用两次展开来访问特定索引上的值,例如:

usage[0]!!.someProperty

这只是一次黑暗中的尝试,但我认为在这种情况下可能发生的事情与OP最初使用WaterUsage?[]声明数组时所做的没有什么不同

也就是说,在使用(WaterUsage?)[]__时,它可能将此声明看作是一个Array of 可选元组 holding 可选WaterUsages__,要求我们在访问其属性之前在索引处展开该成员两次。

有趣的东西!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24557601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档