Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将图像名称传递给SwiftUI中的自定义图像子类_Swift_Swiftui - Fatal编程技术网

将图像名称传递给SwiftUI中的自定义图像子类

将图像名称传递给SwiftUI中的自定义图像子类,swift,swiftui,Swift,Swiftui,我正在尝试完成一些看起来非常简单的事情:我在SwiftUI中有一个自定义的图像子类,为了方便起见,我想在我的应用程序中使用它。我的最终目标是在其他视图中使用OnboardingThumbnailImage,只需将图像名称传递给构造函数 import SwiftUI struct OnboardingThumbnailImage: View { var imageName: String var body: some View { Image(imageName

我正在尝试完成一些看起来非常简单的事情:我在SwiftUI中有一个自定义的
图像
子类,为了方便起见,我想在我的应用程序中使用它。我的最终目标是在其他视图中使用
OnboardingThumbnailImage
,只需将图像名称传递给构造函数

import SwiftUI

struct OnboardingThumbnailImage: View {
    var imageName: String

    var body: some View {
        Image(imageName)
            .resizable()
            .scaledToFit()
            .frame(width: 50, height: 50)
            .foregroundColor(Colors.tintColor)
    }
}

struct OnboardingThumbnailImage_Previews: PreviewProvider {
    static var previews: some View {
        OnboardingThumbnailImage(imageName: "?????")
    }
}
我怎样才能做到这一点?编译器要求我在
OnboardingThumbnailImage\u预览中指定一个值,因此我没有任何线索。我已经研究了绑定,但我不需要在视图之间设置“双向街道”,所以我不确定


为了继承默认的
Image
构造函数,我是否可以将
Image()?如果我离开
Image()
我会得到一个错误:无法在没有参数的情况下调用类型“Image”的初始值设定项。

在结构视图中,变量
imageName
需要值进行初始化。因为它应该是字符串,因为您定义了一个字符串变量并在图像中使用它。若要忽略错误,可以为变量设置空值,以忽略视图构造中初始化的要求

var imageName: String = ""

这是SwiftUI问你的方式

预览此
视图时要显示什么图像

你只能在macOS Catalina上使用,所以如果你没有使用Catalina(像我一样),那么这个功能对你来说不是很重要

您应该将希望在预览中看到的图像放在
位。如果您没有使用Catalina,或者您只是不想预览它,您可以删除整个
OnboardingThumbnailImage\u Previews
结构


还要注意,您不能在SwiftUI中“子类化”另一个视图。你所能做的就是写作,这就是你在这里所做的。SwiftUI的设计倾向于组合而不是继承。您可以在以下页面中找到此概念的解释:,。

您可以将imageName定义为空字符串
var imageName:String=“”
和priview ignore itThanks,那么我需要采取什么步骤使其成为
Image
子类?将
[…]:View
重命名为
[…]:Image
无效。SwiftUI视图中没有子类,因为它们都是符合视图协议的结构,而不是类类型。您不能将子类化为Image,因为Image本身就是一个视图。谢谢!如果要预览在父视图中指定的图像,该怎么办?我不明白如何才能将其“传递”到该文件,这是有意义的。SwiftUI的设计更倾向于合成而不是继承,这是否意味着我不应该为自定义图像创建新文件?同样,您可以删除
OnboardingHumbnailImage\u预览
结构(因为您不需要预览
OnboardingThumbnailImage
本身),并在父视图的预览结构中传入图像名称@Cesare@Cesare是什么给你这样的印象?文件在这里并不重要。它们只是组织代码的一种方式。你如何组织代码取决于你。不过我有Catalina。请给我一点时间,让我看一下你写的所有东西。非常感谢你在这方面的帮助同时,是的,对于文件,我是说创建一个新类,对不起