![](/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.