【发布时间】:2026-01-16 08:30:01
【问题描述】:
我正在尝试创建一个 4x4 的图像网格,我希望它可以从 1 个图像扩展到 4 个图像。
当提供的图像来自常规数组时,此代码有效
var images = ["imageOne", "imageTwo", "imageThree", "imageFour"]
但是,如果数组来自我们绑定的对象,则它不起作用:
@ObjectBinding var images = ImageLoader() //Where our array is in images.images
我的初始化程序如下所示:
init(imageUrls urls: [URL]){
self.images = ImageLoader(urls)
}
而我的ImageLoader 类看起来像这样:
class ImageLoader: BindableObject {
var didChange = PassthroughSubject<ImageLoader, Never>()
var images = [UIImage]() {
didSet{
DispatchQueue.main.async {
self.didChange.send(self)
}
}
}
init(){
}
init(_ urls: [URL]){
for image in urls{
//Download image and append to images array
}
}
}
问题出现在我的View
var body: some View {
return VStack {
if images.images.count == 1{
Image(images.images[0])
.resizable()
} else {
Text("More than one image")
}
}
}
编译时,我收到错误generic parameter 'FalseContent' could not be inferred,其中FalseContent 是SwiftUI buildEither(first:) 函数的一部分。
同样,如果images 不是ImageLoader 的绑定,而是Strings 的常规数组,则它可以正常工作。
我不确定是什么导致了这个问题,它似乎是由绑定引起的,但我不知道该怎么做。
【问题讨论】:
-
嘿 Kontiki,对不起,你说得对,有错误。我试图让它更简洁,但我会的。修复它
-
我已经更新了帖子
-
我想我能够将您的代码重构为可行的东西。很抱歉让您感到痛苦,但请确定:
init(imageUrls urls: [URL])是您视图的初始化器吗? -
是的,这就是初始化程序
-
知道了,贴出答案。干杯。