gpt4 book ai didi

swift - 在 init 中计算一个 let struct 属性的值

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

我有一个名为 Product 的快速结构,它在其 init 方法中采用字典。我想在我的产品中的本地价格结构中计算价格 value。我希望这个值是一个 let 常量,因为它永远不会改变,但是如果不使用 var,swift 不允许我这样做,说 let 常量未正确初始化。

在这种情况下,如何使 Price 结构中的 value 属性成为 let 常量?

struct Product {
let price: Price

init(dictionary: Dictionary<String, AnyObject>) {
if let tmp = dictionary["price"] as? Dictionary<String, AnyObject> { price = Price(dictionary: tmp) } else { price = Price() }
}

struct Price {
var value = ""

init() {
}

init(dictionary: Dictionary<String, AnyObject>) {
if let xForY = dictionary["xForY"] as? Array<Int> {
if xForY.count == 2 {
value = "\(xForY[0]) for \(xForY[1])"
}
}
if let xForPrice = dictionary["xForPrice"] as? Array<Int> {
if value == "" && xForPrice.count == 2 {
value = "\(xForPrice[0]) / \(xForPrice[1]):-"
}
}
if let reduced = dictionary["reduced"] as? String {
if value == "" {
value = "\(reduced):-"
}
}
}
}
}

最佳答案

你必须重写代码,这样编译器才能得到你真正想要做的事情。从您的编码方式推断出它还不够聪明。

我还建议您使 Price 结构的初始化程序可失败,而不是为 value 属性使用空字符串。由于该更改,Product 结构的 price 属性变为可选。

struct Product {
let price: Price?

init(dictionary: Dictionary<String, AnyObject>) {
if let tmp = dictionary["price"] as? Dictionary<String, AnyObject> {
price = Price(dictionary: tmp)
}
else {
price = nil
}
}

struct Price {
let value : String

init?(dictionary: Dictionary<String, AnyObject>) {
if let xForY = dictionary["xForY"] as? Array<Int> where xForY.count == 2 {
value = "\(xForY[0]) for \(xForY[1])"
}
else if let xForPrice = dictionary["xForPrice"] as? Array<Int> where xForPrice.count == 2 {
value = "\(xForPrice[0]) / \(xForPrice[1]):-"
}
else if let reduced = dictionary["reduced"] as? String {
value = "\(reduced):-"
}
else {
return nil
}
}
}
}

关于swift - 在 init 中计算一个 let struct 属性的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32578451/

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