Macos Swift-使用字典-添加多个值
我一直在寻找这个问题的答案,但不幸的是没有成功 我正在开发一个数学应用程序(基于Swift),它保存用户输入的每个函数的数据 (然后我需要使用解析器在NSView上绘制函数) 数据结构已保存到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
字典
中,但我无法添加值和键
字典
已初始化如下:
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] = [:]