swift - 使用函数以编程方式更新 UILabel 文本

标签 swift uilabel

所以我尝试使用 func 更新 UIlabel 文本。我很少看到像我这样的其他问题,我尝试了他们的方法,但它不起作用。 fun 在 UIlabel 中使用时不返回任何值。我在下面显示了我的代码。必须注意的是,当我在 viewdidload 中使用该函数时,我可以检索数据。

lazy var name: UILabel = {
  let lb = UILabel()
  lb.text? = getthename()
  lb.lineBreakMode = NSLineBreakMode.byWordWrapping
  lb.textColor = .mainGreen
  lb.textAlignment = .left
  lb.font = UIFont.boldSystemFont(ofSize:12.0)
  return lb
}()

func getthename() -> String {
  var wins : String = ""
  let ud = (Auth.auth().currentUser?.uid)
  self.ref = Database.database().reference()
  self.ref.child("Users").child(ud!).observeSingleEvent(of: .value, with: {(snapshot) in
    if let getData = snapshot.value as? [String:Any] {
      wins = (getData["lastName "] as? String)!
    }
  })
  return wins
}

最佳答案

尝试替换这行代码

lb.text? = getthename()

使用lb.text = getthename()

您当前正在使用“?”来进行可选的展开操作。符号,它导致该行本质上等于 nil = getthename()

此外,正如 @Larme 提到的,以下代码实际上是异步的:

self.ref.child("Users").child(ud!).observeSingleEvent(of: .value, with: {(snapshot) in
    if let getData = snapshot.value as? [String:Any] {
      wins = (getData["lastName "] as? String)!
    }
  })

我建议您在其他地方设置它,而不是尝试在惰性变量初始值设定项中设置标签的文本。您可以更新 getthename() 函数,以使用对标签的引用在对 observeSingleEvent() 的调用返回后更新标签的文本。

所以像这样

lazy var name: UILabel = {
  let lb = UILabel()
  lb.lineBreakMode = NSLineBreakMode.byWordWrapping
  lb.textColor = .mainGreen
  lb.textAlignment = .left
  lb.font = UIFont.boldSystemFont(ofSize:12.0)
  return lb
}()

然后getthename()函数可以改为如下。您可以从任何地方调用该函数,它会为您设置标签。

func getthename() {
  var wins : String = ""
  let ud = (Auth.auth().currentUser?.uid)
  self.ref = Database.database().reference()
  self.ref.child("Users").child(ud!).observeSingleEvent(of: .value, with: { [weak self] (snapshot) in
    if let getData = snapshot.value as? [String:Any] {
      self?.name.text = (getData["lastName "] as? String)!
    }
  })
}

请注意 observeSingleEvent() 闭包中的 [weak self] ,就像您需要检查的任何异步代码一样,以确保正确的变量是否仍然可用。

关于swift - 使用函数以编程方式更新 UILabel 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54277920/

相关文章:

ios - UISegmentedControl 中的两行文本

iphone - 从另一个类更改 UILabel 的文本

ios - UIView transitionWithView 和 UILabel 在过渡期间失去圆角

objective-c - 在具有下标的 UILabel 上调用方法 sizeToFit 不起作用

ios - Swift – 在容器 View 中嵌入长 UIView

Swift 字符集减法

ios - 如何使用 Cloudinary 在 iOS 中执行动态图像转换

ios - 在 Swift 中实现搜索文本框

Ios Swift 以编程方式更改 Storyboard 上的 View 顺序

ios - 如何调整字体大小以适应 UILabel 的高度和宽度