gpt4 book ai didi

swift - 将 [AnyObject] 插入 [NSMutableDictionary]

转载 作者:行者123 更新时间:2023-11-30 14:15:06 24 4
gpt4 key购买 nike

我正在尝试使用具有两列的 tableView 构建一个应用程序(一列显示字符串,另一列显示每个字符串的复选框)。这些字符串来自 [AnyObject] 变量。我尝试了很多方法将 [AnyObject] 的结果插入 NsMutableDictionnary (由 NsTableView 使用),但没有一个起作用。我必须使用正确数量的对象(与 [AnyObject] 的结果相关)手动构建 dic 才能使其工作,但我希望 dic 能够自动构建自身。

下面是代码示例,如果 [AnyObject] 由 4 个元素组成,则该代码可以正常工作。 TableView 列名称为“jobs”和“unload”:

import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate,NSTableViewDataSource,NSTableViewDelegate {

@IBOutlet weak var window: NSWindow!
@IBOutlet weak var myTableView: NSTableView!
var dataArray:[NSMutableDictionary] = [["jobs": "", "unload": 0],["jobs": "", "unload": 0],["jobs": "", "unload": 0],["jobs": "", "unload": 0]];

func applicationDidFinishLaunching(aNotification: NSNotification) {
...
...
...
var ctlelems:[AnyObject] = grepOut!.componentsSeparatedByCharactersInSet(NSCharacterSet.newlineCharacterSet())
dataArray = [["jobs": "ctlelems[0]", "unload": 0],["jobs": "ctlelems[1]", "unload": 0],["jobs": "ctlelems[2]", "unload": 0],["jobs": "ctlelems[3]", "unload": 0]];
}
func applicationWillTerminate(aNotification: NSNotification) {

}
func numberOfRowsInTableView(aTableView: NSTableView) -> Int
{
return dataArray.count
}
func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject?
{
let object = dataArray[row] as NSMutableDictionary
if ((tableColumn!.identifier) == "unload")
{
println(object)
return object[tableColumn!.identifier] as? Int!
}
else
{

return object[tableColumn!.identifier] as? String!
}
}

func tableView(tableView: NSTableView, setObjectValue object: AnyObject?, forTableColumn tableColumn: NSTableColumn?, row: Int)
{
dataArray[row].setObject(object!, forKey: (tableColumn?.identifier)!)
}
}

我想做以下事情,

var x: Int = 0
for lines in ctlelems {
dataArray = [["jobs": ctlelems[x], "unload": 0]];
x=x+1
}

但它不起作用。大多数时候我会收到“Found nill”错误,或者只显示 [AnyObject] 的最后一个元素。有人可以帮我吗?

最佳答案

dataArray = [["jobs": ctlelems[x], "unload": 0]];

这意味着您在每次迭代时重新定义dataArray。您应该改为附加到 dataArray

声明并初始化您的dataArray:

var dataArray = [Dictionary<String, Any>]()

并附加到它:

for line in ctlelems {
dataArray.append(["jobs": line, "unload": 0])
}

或者以更快速的方式:

dataArray = ctlelems.map { ["jobs": $0, "unload": 0] }

关于swift - 将 [AnyObject] 插入 [NSMutableDictionary],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com