老实说,它不是 HTML ... 但它有点像。但实际上,它不是。
DrivenUI 是一个 iOS SDK,它可以更方便地将 服务器驱动 UI 功能引入并构建到 iOS 应用程序中。目前,它基于 JSON 响应格式在屏幕上渲染 SwiftUI 视图。
⭐️ 在 GitHub 上给我们点赞 — 这对我们很有帮助!
CocoaPods 是 Cocoa 项目的依赖管理工具。 有关使用和安装说明,请访问他们的网站。 要使用 CocoaPods 将 DrivenUI 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
pod 'DrivenUI', '~> 0.1.1'
Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,并且已集成到 swift
编译器中。 它正处于早期开发阶段,但 Driven 确实支持其在支持平台上的使用。
设置好 Swift 包后,将 DrivenUI 添加为依赖项就像将其添加到 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/KarimEbrahemAbdelaziz/DrivenUI.git", .exact("0.1.1"))
]
由于我们处于 BETA
版本,请填写包含您的应用程序 Bundle Id
的 Issue,并留下您的电子邮件,我们将立即向您发送您的 DrivenUI SDK 密钥。
您有两种方法可以在您的应用程序中初始化 DrivenUI。
init
中。AppDelegate
,请将配置方法添加到 didFinishLaunchWithOptions
方法中。Driven.configure(with: YUOR_SDK_KEY)
连接到您的后端并检索您的 JSON 响应(查看支持的视图 JSON 结构 格式)。
在您的 ViewModel 中解析您的 JSON 响应
// Add published property into your ViewModel
// so that you views can react on it's changes ;)
@Published var serverView: DrivenComponent?
// Parse JSON response from API to DrivenComponent
let response = try? JSONDecoder().decode(DrivenComponent.self, from: data)
if let response = response {
DispatchQueue.main.async {
self?.serverView = response
}
} else {
DispatchQueue.main.async {
self?.serverView = nil
}
}
在您的 Content View 中添加此构建函数
@ViewBuilder func buildView() -> some View {
if let serverView = viewModel.serverView {
DrivenComponentFactory(material: serverView).toPresentable()
} else {
Text("No views from server.")
}
}
在您的视图层次结构中使用此 buildView
var body: some View {
NavigationView {
buildView()
.padding([.top], 48)
.navigationBarTitle("DrivenUI SDK")
}
}
然后 瞧 你就得到了在屏幕上渲染的视图 🔥
每个支持的视图组件都由 4 个键组成,每个键都根据您需要渲染的组件占据一个位置
{
// type values are the Supported Views (Please check below section).
"type": "",
// properties values are pair of key-value of Supported Properties (Please check below section).
"properties": { },
// values are pair of key-value of Supported Values for each View (Please check below section).
"values": { },
// subviews values are pair of key-value of another component should be rendered inside one of those views: HStack, VStack, ZStack, and List.
"subviews": { }
}
{
"type": "Text",
"properties": {
"foregroundColor": "000000",
"font": "title",
"fontWeight": "regular",
"width": 300
},
"values": {
"text": "It's simple version working! 😎"
}
}
{
"type": "Image",
"properties": {
"height": 90
},
"values": {
"imageUrl": "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"
}
}
{
"type": "HStack",
"properties": {
"spacing": 16,
"verticalAlignment": "top"
},
"subviews": [
{
"type": "Image",
"properties": {
"height": 40,
"width": 40
},
"values": {
"localImageName": "hiking"
}
},
{
"type": "VStack",
"properties": {
"padding": 8,
"horizontalAlignment": "leading"
},
"subviews": [
{
"type": "Text",
"properties": {
"font": "title",
"fontWeight": "bold"
},
"values": {
"text": "Hiking"
}
},
{
"type": "Text",
"properties": {
"foregroundColor": "333333"
},
"values": {
"text": "This is Hiking sport."
}
}
]
}
]
}
imageUrl
用于从 URL 检索图像。systemIconName
用于使用系统图像。localImageName
用于使用资源目录图像。text
将显示的文本值。width
和 height
foregroundColor
, backgroundColor
, 和 borderColor
borderWidth
、spacing
(对于 HStack 和 VStack)和 padding
horizontalAlignment
leading
center
trailing
verticalAlignment
top
bottom
center
firstTextBaseline
lastTextBaseline
font
largeTitle
title
headline
subheadline
body
callout
footnote
caption
fontWeight
ultraLight
thin
light
regular
medium
semibold
bold
heavy
black
请查看 更新日志 文件以获取更多信息,了解每个版本中包含的内容。