swift - 无法推断通用参数 'FalseContent'

标签 swift swiftui

我正在尝试创建一个 4x4 的图像网格,我希望它可以从 1 张图像缩放到 4 张图像。

当提供的图像来自常规数组时,此代码有效

var images = ["imageOne", "imageTwo", "imageThree", "imageFour"]

但是,如果数组来 self 们绑定(bind)的对象,则它不起作用:

@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 的绑定(bind),而是 String 的常规数组,它工作正常。

我不确定是什么导致了这个问题,它似乎是由绑定(bind)引起的,但我不确定还有什么办法可以做到这一点。

最佳答案

问题是你的图像初始化器,你传递了一个 UIImage,所以你应该这样调用它:

Image(uiImage: images.images[0])

请注意,在处理 View 时,流控制有点复杂,错误消息可能会产生误导。通过注释 View 的 IF 语句的“else”部分,编译器会向您显示它失败的真正原因。

关于swift - 无法推断通用参数 'FalseContent',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57024787/

相关文章:

ios - Swift - 使用来自异步方法的数据更新 View

ios - UIDevice.currentDevice().beginGenerateDeviceOrientationNotifications() 不起作用

SwiftUI 如何从另一个类访问 ContentView 变量

ios - 选择添加到 SwiftUI 列表的新项目

ios - SwiftUI 通过 TabView 以模态方式呈现 View ?

ios - Swift Progress View 动画使进度条超过 100%

arrays - ios swift - 将 AnyObject 列表分配给字典键

swift - 在 Swift 中,如何在不实际调用该方法的情况下测试对象是否实现了签名不同的可选协议(protocol)方法?

Swiftui TabBar : Action for tapping TabItem of currently selected Tab to reset view

ios - 迪尔德 : Library not loaded SwiftUI when app runs on iOS 12 using @available(iOS 13. 0, *)