Macos Swift-使用字典-添加多个值

Macos Swift-使用字典-添加多个值,macos,cocoa,swift,dictionary,key-value-store,Macos,Cocoa,Swift,Dictionary,Key Value Store,我一直在寻找这个问题的答案,但不幸的是没有成功 我正在开发一个数学应用程序(基于Swift),它保存用户输入的每个函数的数据 (然后我需要使用解析器在NSView上绘制函数) 数据结构已保存到字典中,但我无法添加值和键 字典已初始化如下: var functions = [String : [[String : NSBezierPath], [String : NSColor], [String : CGFloat], [String : Bool]]](); //1A.The String

我一直在寻找这个问题的答案,但不幸的是没有成功

我正在开发一个数学应用程序(基于Swift),它保存用户输入的每个函数的数据

(然后我需要使用解析器在NSView上绘制函数)

数据结构已保存到
字典中,但我无法添加值和键

字典
已初始化如下:

var functions = [String : [[String : NSBezierPath], [String : NSColor], [String : CGFloat], [String : Bool]]]();

//1A.The String key of the main Dictionary is the value of the function, such as "sin(x)"
//1B.The value of the `Dictionary` is an `Array` od `Dictionaries`

//2.The first value is a dictionary, whose key is a String and value NSBezierPath()
//3.The second value is a dictionary, whose key is a String and value NSColor()
//4.The third value is a dictionary, whose key is a String and value CGFloat()
//5.The first value is a dictionary, whose key is a String and value Bool()
为了添加函数,我实现了一个方法(我将报告其中的一部分):

我得到了以下错误

'@|value $T10' is not identical to '(String,[([String:NSbezierPath],[String : NSColor],[String : CGFloat],[String : Bool])])'
我希望这个问题足够清楚和完整

以防我会立即添加您需要的任何类型的信息


祝您节日愉快。

字典从特定的键类型映射到特定的值类型。例如,可以使键类型
String
和值类型
Int

在您的例子中,您声明了一个非常奇怪的字典:从
String
s(足够公平)映射到4个不同字典类型的4元组数组(每个元组从String映射到不同类型)

(我穿的是新的,但看起来是这样的:

var thingy = [String,String]() 
是这方面的简写:

 var thingy = [(String,String)]()  
哈。奇怪,但它能用。你的字典使用了这个技巧的变体。)

这意味着您需要创建一个4元组数组(请注意附加括号),以使赋值有效:

我猜你不是有意的。你真的想要这4种不同字典类型的数组吗?如果是这样的话,你就倒霉了——你不能在同一个数组中存储不同的类型(字典的值有不同的类型)

(好吧,如果你把字典的值做成任何的,你都可以——但这是一个糟糕的主意,使用起来会是一场噩梦)

可能您想要的结果是这样的(即使
函数
字典从字符串映射到不同类型的4元组字典):

您可以像这样为字典赋值(注意,rhs上没有方括号):

这将起作用,但它将是非常不愉快的工作。但是,您真的想将结构化数据存储在字典和数组中吗?这不是JavaScript;-)在那本多层次的字典里,你会陷入困境的。声明一个结构!在代码中使用它会容易得多

struct Functions {
    var beziers: [String:NSBezierPath]
    var color: [String:NSColor]
    var line: [String:NSColor]
    var floats: [String:CGFloat]
    var bools: [String:Bool]
}
var functions: [String:Functions] = [:]

更好的是,如果所有的边框、颜色等都应该是同一个键的引用,请声明一个包含所有这些或类似项的词典。

谢谢您的回答。这对我帮助很大!我最终决定按照你的建议声明一个结构,它就像一个符咒!再次感谢你!
functions[theFunction] = [(path, color, line, visible)]
var functions = [String : ([String : NSBezierPath], [String : NSColor], [String : CGFloat], [String : Bool])]()
functions[theFunction] = (path, color, line, visible)
struct Functions {
    var beziers: [String:NSBezierPath]
    var color: [String:NSColor]
    var line: [String:NSColor]
    var floats: [String:CGFloat]
    var bools: [String:Bool]
}
var functions: [String:Functions] = [:]