Last active
January 6, 2020 16:44
-
-
Save yutailang0119/b3d8114bd18d8b1404e58edaabf85cc8 to your computer and use it in GitHub Desktop.
Debugging View for SwiftUI
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import SwiftUI | |
import PlaygroundSupport | |
public struct DebuggerView<Body: View>: View { | |
private let _body: Body | |
private let color: Color | |
public init(body: Body, color: Color? = nil) { | |
self._body = body | |
self.color = color ?? Color.random | |
} | |
public var body: some View { | |
ZStack.init(alignment: .topLeading) { | |
self._body | |
.layoutPriority(1.0) | |
self.bodyTypeLabel | |
} | |
.border(color) | |
} | |
private var bodyTypeLabel: some View { | |
Text(String(describing: type(of: _body))) | |
.lineLimit(1) | |
.font(.system(size: 10.0)) | |
.foregroundColor(.primary) | |
.background(color.opacity(0.7)) | |
} | |
} | |
private extension SwiftUI.Color { | |
static var random: Self { | |
[ | |
.blue, | |
.green, | |
.orange, | |
.pink, | |
.purple, | |
.red, | |
.yellow, | |
] | |
.randomElement()! | |
} | |
} | |
struct ContentView: View { | |
var body: some View { | |
HelloWorldView() | |
} | |
} | |
struct HelloWorldView: View { | |
var body: some View { | |
VStack { | |
HelloView() | |
WorldView() | |
} | |
} | |
} | |
struct HelloView: View { | |
var body: some View { | |
Text("Hello") | |
} | |
} | |
struct WorldView: View { | |
var body: some View { | |
Text("World") | |
} | |
} | |
let contentView = ContentView() | |
let debuggerView = DebuggerView(body: contentView) | |
let host = UIHostingController(rootView: debuggerView) | |
PlaygroundPage.current.liveView = host |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment