我正在尝试创建字典扩展,其中字典的类型为
在很多地方都在寻找并尝试了不同的方法,但是似乎没有一个可行。这是其中之一:
extension Dictionary where <String, AnyObject>{
var jsonString:String {
return ""
}
}
由于某种原因实际上不起作用的另一种方法:
extension Dictionary where Key:Hashable, Value:AnyObject {
var jsonString:String {
do {
let stringData = try NSJSONSerialization.dataWithJSONObject(self, options: NSJSONWritingOptions.PrettyPrinted)
if let string = String(data: stringData, encoding: NSUTF8StringEncoding){
return string
}
}catch _ {
}
return ""
}
}
得到: 参数类型“字典”与预期类型的“ AnyObject”不符
从3.1开始,我们可以进行具体扩展,即:
extension Dictionary where Key == String {}
我们无法使用具体泛型来实现具体类型,即:
extension Dictionary where Key == String
但是,由于Dictionary符合序列,并且我们可以符合带有具体泛型的协议类型,因此我们可以:
extension Sequence where Iterator.Element == (key: String, value: AnyObject) {
func doStuff() {...
否则,我们可以将密钥约束为字符串遵循的协议,如下所示:
extension Dictionary where Key: StringLiteralConvertible, Value: AnyObject {
var jsonString: String {
return ""
}
}
根据您更新的答案。Json序列化需要一个对象,Swift字典是结构。您需要转换为。NSDictionary
必须指定Key
要符合NSObject
才能正确转换为NSDictionary
。
小提示:字典已经将约束类型输入
Key
为Hashable
,因此您最初的约束没有添加任何内容。
extension Dictionary where Key: NSObject, Value:AnyObject {
var jsonString:String {
do {
let stringData = try NSJSONSerialization.dataWithJSONObject(self as NSDictionary, options: NSJSONWritingOptions.PrettyPrinted)
if let string = String(data: stringData, encoding: NSUTF8StringEncoding){
return string
}
}catch _ {
}
return ""
}
}
请注意,字典必须符合此类型才能访问扩展名。
let dict = ["k" : "v"]
将成为type [String : String]
,因此您必须明确声明:
let dict: [NSObject : AnyObject] = ["k" : "v"]
当我收到扩展错误时,我无法知道为什么会发生错误。
Szenario:我有两个扩展,它们用一些特定字段扩展了。在TYPO3 9之前,我必须使用以下打字脚本配置对新闻扩展的依赖关系进行配置: 模型扩展了基本扩展的模型: 在TYPO3 10中,在(中断:#87623): 只要您只有一个扩展新闻扩展名的扩展名,它就可以工作多久。如果您有第二个扩展并启用TYPO3缓存,您将得到一个错误,即在第一个扩展中添加的字段在新闻扩展的模板中不可用。奇怪的是,这个问题
ES6加强了对Unicode的支持,并且扩展了字符串对象。 字符的Unicode表示法 JavaScript允许采用\uxxxx形式表示一个字符,其中“xxxx”表示字符的码点。 "\u0061" // "a" 但是,这种表示法只限于\u0000——\uFFFF之间的字符。超出这个范围的字符,必须用两个双字节的形式表达。 "\uD842\uDFB7" // "
我正在Windows上运行Monodevelop。我已经安装了Git扩展(包括msysGit)。我使用mysysGit生成了一个RSA密钥对(ssh-keygen-t RSA),并将该密钥添加到我们的Git服务器(使用Gitlab)。这种设置是正确的:我可以使用命令行以及Git扩展GUI(它本身使用命令行)推拉。然而,在Monodevelop中,推拉失败。 版本控制 那么,MonoDevelopm
我安装了一些仅在特定工作区中启用的扩展。 通过设置,通常工作区特定的东西会保存在工作区文件夹中的. vscode/settings.json中。然而,扩展似乎不是这种情况。 我知道扩展本身也安装在。vscode/extensions在user profile文件夹中,但我找不到任何指示它们是启用还是禁用的内容。这适用于本地、远程和给定工作区。 检查设置同步似乎会显示一个extensions.jso
为了扩展现有字段,您必须将内置字段(例如FieldTextInput,FieldColour)子类化,然后修改其中的一部分以满足您的需求。 您可以修改的字段的某些部分是: 它的编辑器 它的块显示 它显示的文本 如果要创建不需要任何内置字段行为的自定义字段,则应将Field子类化。 常用扩展 大多数自定义字段扩展了以下三种类型之一: 文本输入 如果希望用户在字段中键入内容,则应扩展FieldText