gpt4 book ai didi

标签中的 Swift 可选

转载 作者:行者123 更新时间:2023-11-28 09:34:39 25 4
gpt4 key购买 nike

我这里有这段代码

let fundsreceived = String(stringInterpolationSegment: self.campaign?["CurrentFunds"]!)
cell.FundsReceivedLabel.text = "$\(funds received)"

正在打印 Optional(1000)

我已经将 ! 添加到变量中,但可选的并没有消失。知道我在这里做错了什么吗?

最佳答案

发生这种情况是因为您传递给的参数

String(stringInterpolationSegment:)

是一个可选的

Yes, you did a force unwrap and you still have an Optional...

事实上,如果你分解你的线......

let fundsreceived = String(stringInterpolationSegment: self.campaign?["CurrentFunds"]!)

进入以下等效语句...

let value = self.campaign?["CurrentFunds"]! // value is an Optional, this is the origin of your problem
let fundsreceived = String(stringInterpolationSegment: value)

你发现 value 是一个 Optional!

为什么?

  1. 因为self.campaign? 产生一个Optional
  2. 然后 ["CurrentFunds"] 产生另一个可选
  3. 最后你的力 unwrap removes 一个 Optional

So 2 Optionals - 1 Optional = 1 Optional

首先是我能找到的最丑陋的解决方案

我编写此解决方案只是为了告诉您您应该做什么。

let fundsreceived = String(stringInterpolationSegment: self.campaign!["CurrentFunds"]!)

如您所见,我用强制展开 ! 替换了您的条件展开 ?。只是不要在家里做!

现在是好的解决方案

记住,你应该尽可能避开这个家伙!!

if let
campaign = self.campaign,
currentFunds = campaign["CurrentFunds"] {
cell.FundsReceivedLabel.text = String(stringInterpolationSegment:currentFunds)
}
  1. 这里我们使用条件绑定(bind)将可选的self.campaign转换为非可选的常量(如果可能)。
  2. 然后我们将 campaign["CurrentFunds"] 的值转换为非可选类型(如果可能)。

最后,如果 IF 确实成功,我们可以安全地使用 currentFunds,因为它不是可选的。

希望这对您有所帮助。

关于标签中的 Swift 可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31939516/

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