gpt4 book ai didi

swift - Swift 中的选项和字典

转载 作者:行者123 更新时间:2023-11-30 10:15:49 33 4
gpt4 key购买 nike

我在 Swift 中的字典方面遇到了问题,这与我定义属性的方式有关。在 Objective-C 中,可以定义字典属性,然后在代码中填充字典。我尝试在 Swift 中定义一个字典作为可选,但遇到了许多错误。这是我输入的内容。

var URLDictionary : [String:String]?

我尝试通过使用键访问字典中的值来设置字符串属性。

self.stringProperty = URLDictionary["Key"]

但是,我收到以下错误消息。

Cannot subscript a value of type '[String:String]' with an index of type'String'

通过删除 ?从行

var URLDictionary : [String:String]?

给予

var URLDictionary : [String:String]

错误消息消失。

我使用 ? 的原因首先是因为当我最初声明字典属性时收到了警告,而问号使它消失了。警告是

Stored property 'URLDictionary' without initial value prevents synthesized initializers.

我的问题是,你如何或能够将字典定义为可选项?如果我从一开始就知道字典值,我假设在声明字典时填充字典是有意义的。

保重,

乔恩

最佳答案

最好努力修复原始错误,其余错误应该自行修复,因为您没有处理可选字典。

您最初的错误是:

Stored property 'URLDictionary' without initial value prevents synthesized initializers.

Xcode 提示您已经创建了一个字典,但没有给它一个初始值。要为 URLDictionary 指定初始值,您可以执行以下任一操作:

1.URLDictionary 提供一个空字典的默认属性值(或者如果您愿意,它可能已经包含键和值...)

class MyClass {
var URLDictionary = [String: String]()
}

2.使用init方法为URLDictionary分配一个值。

class MyClass {
var URLDictionary: [String: String]

init(urlDict: [String: String]) {
self.URLDictionary = urlDict
}
}

如果您想在初始化时为 URLDictionary 提供一个值,则第二种方法更好。

有关更多信息,我建议查看 The Swift Programming Language: Initialization

<小时/>

如果由于某种原因您仍然需要一个可选字典,让我们看看其他错误消息:

Cannot subscript a value of type '[String:String]' with an index of type'String'

不幸的是,该消息有点误导,使用 String 作为键并不是问题的真正原因。相反,我怀疑 stringProperty 是一个 String不是可选的字符串

如果您查看文档,您将看到 Dictionarysubscript 方法返回一个可选值,指示所提供的键是否存在值。

subscript(key: Key) -> Value?

因此,您尝试将一个可选值(由 URLDictionary 返回)分配给一个非可选值(stringProperty)。为了解决这个问题,您可以使用可选绑定(bind)和可选链接,如下所示:

// Note '?' after URLDictionary to check if URLDictionary is non-nil.
if let value = myClassInstance.URLDictionary?["Key"] {
stringProperty = value
}

希望能帮助解答您的问题。

关于swift - Swift 中的选项和字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063763/

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