## 打印 View 的类型
给 View 添加一个 extension 函数用来打印 View 的具体类型。debug 通过使用反射类 Mirror 来实现获取静态类型。
```swift
extension View {
/// 调试函数,打印类型
func debug() -> Self {
print(Mirror(reflecting: self).subjectType)
return self
}
}
```
[Opaque Types - The Swift Programming Language (Swift 5.3)](https://docs.swift.org/swift-book/LanguageGuide/OpaqueTypes.html)
接下来我们实现一个非常非常简单的按钮,然后使用 debug() 调试输出这个按钮的类型
1. 这是一个标题 "点我啊" 的按钮
2. 给按钮设置默认的 padding
3. 按钮的背景色黑色
4. 按钮圆角是 10.0
```swift
Button(action: {
print("Button taped!")
}, label: {
Text("点我啊")
.padding()
.background(Color.red)
.cornerRadius(10)
}).debug()
/// 输出
Button<
ModifiedContent<
ModifiedContent<
ModifiedContent<Text, _PaddingLayout>,
_BackgroundModifier<Color>
>,
_ClipEffect<RoundedRectangle>
>
>
```
我的天,这居然是当前这个按钮的类型,复杂到比创建的他的代码还要复杂。这仅仅是一个简单的按钮,如果是一个非常简单的按钮,如果一个复杂的页面那么类型会复杂到不可想象
我想你瞬间就明白了 Swift 为什么要创建不透明类型了
给 View 添加一个 extension 函数用来打印 View 的具体类型。debug 通过使用反射类 Mirror 来实现获取静态类型。
```swift
extension View {
/// 调试函数,打印类型
func debug() -> Self {
print(Mirror(reflecting: self).subjectType)
return self
}
}
```
[Opaque Types - The Swift Programming Language (Swift 5.3)](https://docs.swift.org/swift-book/LanguageGuide/OpaqueTypes.html)
接下来我们实现一个非常非常简单的按钮,然后使用 debug() 调试输出这个按钮的类型
1. 这是一个标题 "点我啊" 的按钮
2. 给按钮设置默认的 padding
3. 按钮的背景色黑色
4. 按钮圆角是 10.0
```swift
Button(action: {
print("Button taped!")
}, label: {
Text("点我啊")
.padding()
.background(Color.red)
.cornerRadius(10)
}).debug()
/// 输出
Button<
ModifiedContent<
ModifiedContent<
ModifiedContent<Text, _PaddingLayout>,
_BackgroundModifier<Color>
>,
_ClipEffect<RoundedRectangle>
>
>
```
我的天,这居然是当前这个按钮的类型,复杂到比创建的他的代码还要复杂。这仅仅是一个简单的按钮,如果是一个非常简单的按钮,如果一个复杂的页面那么类型会复杂到不可想象
我想你瞬间就明白了 Swift 为什么要创建不透明类型了