Решение
Вместо него можно просто расширить Image
.
Используется примерно так:
struct ContentView: View {
var body: some View {
VStack {
Text("Hello World!")
Image("someName")
.imageIconModifier()
}
}
}
Image
расширение:
extension Image {
func imageIconModifier() -> some View {
self
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 10, height: 10, alignment: .center)
}
}
Почему ваше решение не будет работать
Сначала вы получили ошибку:
Тип 'IconModifier' не соответствует протоколу 'ViewModifier'
Это означает, что ваш IconModifier
не удовлетворял требованиям протокола ViewModifier
, который, если мы увидим определение:
func body(content: Self.Content) -> Self.Body
, тогда как у вас было:
func body(content: Image) -> Self.Body
, который не работает. Итак, далее - мы изменим это на Content
вместо Image
:
Значение типа 'IconModifier.Content' (он же _ViewModifier_Content ') не имеет члена' resizable '
Это в основном говорит о том, что для любого View
нет модификатора .resizable()
. Модификатор .resizable()
внутри определен только внутри extension Image
, поэтому никакой другой модификатор View
не имеет этого модификатора.
И это основная проблема - у него нет доступа к оригинальному View
(Image
для того, что мы хотим) через параметр content
в ViewModifier
.
Именно поэтому я только что сделал расширение для Image
.
Надеюсь, это объяснение поможет!