FOSUtilities 包提供了三个库:FOSFoundation、FOSMVVM 和 FOSTesting。
有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。
FOSFoundation 是一个协议、模式、类型和例程的库,我发现在我的项目中通常很有用。支持的领域包括:
有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。
FOSMVVM 是一个库,它实现了 Model-View-ViewModel 模式,用于将 SwiftUI 项目绑定到 Vapor Web 服务。
有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。
这是一个设置新的基于 Model-View-ViewModel 的客户端应用程序的示例
public struct LandingPageViewModel: RequestableViewModel {
public typealias Request = LandingPageRequest
@LocalizedString public var pageTitle
public var vmId = ViewModelId()
public init() {}
public static func stub() -> Self { .init() }
}
struct LandingPageView: ViewModelView {
let viewModel: LandingPageViewModel
var body: some View {
VStack {
Text(viewModel.pageTitle)
.font(.headline)
.padding(.bottom, 30)
}
.padding()
}
}
@main
struct MyApp: App {
@State private var viewModel: LandingPageViewModel?
var body: some Scene {
WindowGroup {
let vmBinding = $viewModel
LandingPageView.bind(
viewModel: vmBinding
)
}
.environment(
MVVMEnvironment(
currentVersion: .currentApplicationVersion,
appBundle: Bundle.main,
deploymentURLs: [
.production, .init(serverBaseURL: URL(string: "http://api.mywebserver.com")!),
.staging, .init(serverBaseURL: URL(string: "http://staging-api.mywebserver.com")!),
.debug, .init(serverBaseURL: URL(string: "https://:8080")!)
]
)
)
}
}
public func configure(_ app: Application) async throws {
// uncomment to serve files from /Public folder
// app.middleware.use(FileMiddleware(publicDirectory: app.directory.publicDirectory))
// register routes
try routes(app)
try app.initYamlLocalization(
bundle: Bundle.module,
resourceDirectoryName: "Resources"
)
}
func routes(_ app: Application) throws {
app.routesregister(viewModel: LandingPageViewModel.self)
}
FOSTestingUtilities 是一个测试模式、类型和例程的包,我发现在我的项目中通常很有用。
有关指南、文章和 API 文档,请参阅Web 上的库文档或 Xcode 中的文档。
FOSUtilities 支持 Swift Package Manager。 要在项目中包含 FOSUtilities,请将以下内容添加到您的 Package.swift 文件中
.package(url: "git@github.com:foscomputerservices/FOSUtilities.git", branch: "main"),
要使用其中一个库,请在 Package.swift 文件中的目标的依赖项列表中添加一个或多个条目
.target(
name: "MyTarget",
dependencies: [
.product(name: "FOSFoundation", package: "FOSUtilities"),
.product(name: "FOSMVVM", package: "FOSUtilities")
// ...
]
),
.testTarget(
name: "MyTests",
dependencies: [
.byName(name: "MyTarget"),
.byName(name: "FOSFoundation"),
.byName(name: "FOSMVVM"),
.byName(name: "FOSTesting"),
.product(name: "Testing", package: "swift-testing")
]
)
欢迎所有贡献! 有关更多详细信息,请参阅 CONTRIBUTING.md。
此项目由 David Hunt 维护,他是 FOS Computer Services, LLC 的所有者。
FOSUtilities 采用 Apache 许可证。 有关更多信息,请参阅 LICENSE 文件。