繁体   English   中英

如何在 SwiftUI 结构内的计算属性内使用 for 循环

[英]How to use for loop inside computed property inside struct in SwiftUI

对原生 iOS 来说非常新,我有一个结构:


struct PrayerTime: View{
  let prayerTime:[String:String]
  
  var prayerName : String {
    for (key, _) in prayerTime {
      return key.description
    }
  } // error :Missing return in a function expected to return 'String'
  
  var time : String {
    for (_, value) in prayerTime {
      return value
    }
  } // error :Missing return in a function expected to return 'String'
  
  var body: some View {
    VStack{
      Text(prayerName).scaledToFill().minimumScaleFactor(0.5)
      Text(time).bold().scaledToFill().minimumScaleFactor(0.5)
    }
  }
}

我想在单独的属性中提取字典的键和值。

请注意,字典只有一个键:值对。

问题是, prayerTime可能为空,在这种情况下, for循环不会执行,因此不会返回任何内容。

如果您想从Dictionary返回第一个键/值,则根本不应该使用循环。 您应该改为使用Dictionarykeysvalues属性,并使用first访问它们的第一个元素。

var prayerName : String {
    prayerTime.keys.first ?? ""
}

var time : String {
  prayerTime.values.first ?? ""
}

但是,如果您的prayerTime保证包含单个键值对,那么您最好将键和值作为单独的变量注入,而不需要Dictionary

struct PrayerTime: View{
    let prayerName: String
    let time: String

    var body: some View {
        VStack{
            Text(prayerName).scaledToFill().minimumScaleFactor(0.5)
            Text(time).bold().scaledToFill().minimumScaleFactor(0.5)
        }
    }
}

发生错误是因为如果字典为空,这两个属性都不会返回任何内容。 你必须写

var prayerName : String {
    for (key, _) in prayerTime {
      return key.description
    }
    return ""
}

但是由于字典只包含一个键/值对,所以有一种更简单的方法

var body: some View {
    VStack{
      Text(prayerTime.keys.first ?? "").scaledToFill().minimumScaleFactor(0.5)
      Text(prayerTime.values.first ?? "").bold().scaledToFill().minimumScaleFactor(0.5)
    }
}

并删除两个计算属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM