在SwiftUI的自定义视图中访问Image的修饰符

Jas*_*off 8 ios swift swiftui

目前,我已经在SwiftUI中创建了一个自定义视图,其中包含带有一些详细信息的Image。我们如何在视图实例之外添加特定的图像修改器?

import Foundation
import SwiftUI
import Combine

struct RemoteImage: View {

    // Hold reference to our remote resource through binding
    @ObjectBinding
    private var resource: RemoteResource

    // Initialize the Image with a string
    init(urlString: String) {

        // Create our resource and request our data
        // Will fetch the resource from the internet
        self.resource = RemoteResource(urlString)
    }

    // Computed var that will return a placeholder image our our actual resource
    private var image: UIImage {
        self.resource.data.flatMap(UIImage.init) ?? UIImage(named: "placeholder")!
    }

    var body: some View {
        Image(uiImage: image)
    }
}
Run Code Online (Sandbox Code Playgroud)

我将如何从一个实例添加改性剂RemoteImageImage

RemoteImage(urlString: "image-url-here")
    .resizable()
    .scaledToFit()
Run Code Online (Sandbox Code Playgroud)

如果有人可以解决我的问题,请告诉我。

LuL*_*aGa 4

如果你像这样声明你的RemoteImage:

import Foundation
import SwiftUI
import Combine

struct RemoteImage: View {

    // Hold reference to our remote resource through binding
    @ObservedObject
    private var resource: RemoteResource

    // Initialize the Image with a string
    init(urlString: String) {

        // Create our resource and request our data
        // Will fetch the resource from the internet
        self.resource = RemoteResource(urlString)
    }

    // Computed var that will return a placeholder image our our actual resource
    private var image: UIImage {
        self.resource.data.flatMap(UIImage.init) ?? UIImage(named: "placeholder")!
    }

    var body: Image {
        Image(uiImage: image)
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样调用所有图像特定的修饰符:

RemoteImage(urlString: "image-url-here").body
    .resizable()
    .scaledToFit()
Run Code Online (Sandbox Code Playgroud)

并不理想,但至少您不必手动重新声明每个修饰符。