arrays - Swift:类数组的问题
问题描述
我正在尝试创建一个包含两项的数组:一个 URL 和一个字符串。项目的索引很重要。
数据取自 QuartzFilterManager,它提供有关安装在系统上的 Quartz Filters 的信息。
import Cocoa
import Quartz
class myFilter {
var myURL: URL?
var name: String = ""
}
func getFilters() -> Array<String> {
var filterArray: Array<myFilter>
if let Filters = QuartzFilterManager.filters(inDomains: nil) {
for (index, eachFilter) in Filters.enumerated() {
filterArray[index].name.append((eachFilter as! QuartzFilter).localizedName()!)
filterArray[index].myURL!.append((eachFilter as! QuartzFilter).url()!)
}
}
}
Xcode 抱怨 Type URL 没有 append 方法。但是前一行中的 name 属性有效。简而言之,如何在我的数组中设置特定属性?
解决方案
有很多问题。
myFilter
创建一个结构而不是类,并将其正确命名为MyFilter
.- 你从不初始化你的
filterArray
,你只声明它。 - 您需要为
MyFilter
要添加到数组的每个 url/名称对创建一个新实例。 enumerated
在这种情况下你不需要使用。- 您的
getFilter
函数的返回类型错误(我认为)。 - 使用正确的命名约定。
这是清理后的代码:
struct MyFilter {
var myURL: URL?
var name: String
}
func getFilters() -> [MyFilter] {
var filterArray = [MyFilter]()
if let filters = QuartzFilterManager.filters(inDomains: nil) {
for eachFilter in filters {
let filter = MyFilter(myURL: (eachFilter as! QuartzFilter).url(), name: (eachFilter as! QuartzFilter).localizedName()!)
filterArray.append(filter)
}
}
return filterArray
}
它仍然不理想。不得不eachFilter
使用as! QuartzFilter
是笨重的。
和其他用途!
都不好。强制展开调用localizedName()
可能会崩溃。考虑适当的解决方案。
推荐阅读
- java - 蓝牙 LE 通过应用程序在 Android 设备之间发送字符串数据
- linux - 从 python GUI tkinter 运行 linux 终端命令
- autohotkey - InputBox 命令的输出为空
- date - 根据时间递增日期
- python - Web 抓取 BeautifulSoup find_all 在 APEC 上不起作用
- c# - 如何以编程方式为 Web 服务实现 AAD 身份验证提供程序?
- go - Mapstructure 不解码以 @ 开头的 json 键
- javascript - 从对象返回和更新值
- r - R中的两个成对T检验给出不同的P值
- haskell - 我可以与 where 子句中定义的函数进行模式匹配吗?