[英]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
返回第一个键/值,则根本不应该使用循环。 您应该改为使用Dictionary
的keys
和values
属性,并使用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.