![](/img/trans.png)
[英]How can I make a storyboard to the left of an initial view storyboard on Apple Watch using SwiftuI?
[英]How can I make body without inheriting from other defined View in SwiftUI, How apple done this at first place?
我喜欢在不使用继承的情况下学习和了解 View 的创建,例如为了显示我的目标,我创建了一个名为Color2的新类型 View,它按预期工作,但事实上它继承自定义明确的 Color,所以如果我想要使 Color2 独立,而不是从我必须创建或返回的任何东西继承body ,否则Color2不会被 SwiftUI 编译! 这更像是先有鸡还是先有蛋?
Apple 是如何让Color一开始就独立存在甚至存在的? Apple 在做 Color View 的时候,他们也应该考虑 Color 的 body,但是 Apple 只是在创建 Color,他们甚至不能像我在代码中那样继承! 因为没有要继承的颜色视图!!!
所以问题/问题是如何在没有符合视图的引用/定义视图的情况下返回正文? (看!我想在没有鸡的情况下创建鸡蛋)
这个向下的代码工作,它们只是伪代码:
struct ContentView: View {
var body: some View {
Color2.red
}
}
enum Color2 { case red, black }
extension Color2: View {
public var body: some View {
switch self {
case Color2.red: Color.red // <<: Here: how can I return a View if I want not using defined View!
case Color2.black: Color.black // <<: Here: how can I return a View if I want not using defined View!
}
}
}
所以问题/问题是如何在没有符合视图的引用/定义视图的情况下返回正文?
你不能。
作为 SwiftUI 的用户,您可以这样做:
您可以通过实现body
方法来创建符合View
的类型。
您创建符合View
的类型的实例并将它们传递给函数或从函数返回它们。
以下是你不做的事情:
View
询问它的body
。 SwiftUI 框架向View
请求其body
。 你永远不会。
诀窍是 SwiftUI 并不总是向View
询问它的body
。
SwiftUI 知道一些特定的“原始” View
类型。 当 SwiftUI 需要渲染(或布局)原始View
时,它会识别出View
是原始类型并对其进行特殊处理,而无需询问原始View
的body
。
一个View
类型是原始的,如果它的Body
是Never
。 我怎么能确定这一点? 因为不可能返回Never
类型的值。 没有这样的值,所以,如果View
的body
返回Never
,我知道 SwiftUI 不可能向那个View
询问它的body
,所以 SwiftUI必须以不同于“正常” View
View
例如, Text
、 Image
和Color
都是 SwiftUI 原语:
1> import SwiftUI
2> Text.Body.self
$R0: Text.Body.Type = Never
3> Image.Body.self
$R1: Image.Body.Type = Never
4> Color.Body.self
$R2: Color.Body.Type = Never
另一方面, Rectangle
不是基元,但它的body
返回一个未记录的基元:
5> Rectangle.Body.self
$R3: Rectangle.Body.Type = _ShapeView<Rectangle, ForegroundStyle>
6> _ShapeView<Rectangle, ForegroundStyle>.Body.self
$R4: _ShapeView<Rectangle, ForegroundStyle>.Body.Type = Never
您无法实现自己的原始View
类型,因为您无权访问识别和处理原始View
类型的 SwiftUI 实现细节。
一切都必须从某个地方开始。 因此,您可以从 View 开始并撰写,如
https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-and-compose-custom-views
或者您可以包装一个 UIView,如
https://www.hackingwithswift.com/quick-start/swiftui/how-to-wrap-a-custom-uiview-for-swiftui
要求更低的级别就是下拉到屏幕的像素级别,根本没有框架,这是没有意义的。 您是框架的用户,而不是框架的作者。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.