将图像名称传递给SwiftUI中的自定义图像子类
我正在尝试完成一些看起来非常简单的事情:我在SwiftUI中有一个自定义的将图像名称传递给SwiftUI中的自定义图像子类,swift,swiftui,Swift,Swiftui,我正在尝试完成一些看起来非常简单的事情:我在SwiftUI中有一个自定义的图像子类,为了方便起见,我想在我的应用程序中使用它。我的最终目标是在其他视图中使用OnboardingThumbnailImage,只需将图像名称传递给构造函数 import SwiftUI struct OnboardingThumbnailImage: View { var imageName: String var body: some View { Image(imageName
图像
子类,为了方便起见,我想在我的应用程序中使用它。我的最终目标是在其他视图中使用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。请给我一点时间,让我看一下你写的所有东西。非常感谢你在这方面的帮助同时,是的,对于文件,我是说创建一个新类,对不起