Files
ReadViewSDK/Sources/RDReaderView/EPUBUI/ReaderController/RDEPUBReaderDependencies.swift
T
shenandshen 948004eed1 docs: 补充注释、修正过时文档、清理重复内容
源码注释:
- 为 ~60 个 Swift 文件补充缺失的 doc comment(file header、类型、属性、方法)
- 修正 4 处错误注释:翻页模式数量、搜索行为描述、手势识别器描述、悬空文档块

文档维护:
- 删除重复文档:WXRead/读书EPUB阅读器实现架构.md(与微信读书版完全一致)
- 合并重叠文档:阅读器规划.md → 阅读器功能开发计划.md(单一真值)
- 修正过时内容:所有文档中"四种翻页模式"→"三种",移除 horizontalCoverScroll
- 更新架构图:补齐 EPUBUI/ReaderController、Paging/、Typesetter/ 等子目录
- 更新 index.md 索引:新增开发计划和架构对比文档引用
2026-06-01 09:33:23 +08:00

88 lines
3.8 KiB
Swift

// RDEPUBReaderDependencies.swift
// EPUB 阅读器依赖注入配置,定义显示环境协议与核心组件工厂
import UIKit
/// 阅读器显示环境协议,抽象屏幕亮度和视口尺寸以支持测试和多平台适配
public protocol RDEPUBReaderDisplayEnvironment: AnyObject {
/// 当前屏幕亮度,取值范围 0.0 ~ 1.0
var currentBrightness: CGFloat { get set }
/// 后备视口尺寸,用于无法获取实际视图尺寸时的布局计算
var fallbackViewportSize: CGSize { get }
}
/// 基于 UIScreen 的默认显示环境实现,直接读写系统屏幕亮度
public final class RDEPUBUIScreenEnvironment: RDEPUBReaderDisplayEnvironment {
public init() {}
public var currentBrightness: CGFloat {
get { CGFloat(UIScreen.main.brightness) }
set { UIScreen.main.brightness = newValue }
}
public var fallbackViewportSize: CGSize {
UIScreen.main.bounds.size
}
}
/// EPUB 阅读器核心依赖容器,通过工厂闭包注入各组件以便替换和测试
public struct RDEPUBReaderDependencies {
/// 显示环境实例
public var environment: any RDEPUBReaderDisplayEnvironment
/// EPUB 解析器工厂
public var makeParser: () -> RDEPUBParser
/// 分页器工厂
public var makePaginator: () -> RDEPUBPaginator
/// 富文本书籍构建器工厂
public var makeTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder
/// 纯文本书籍构建器工厂
public var makePlainTextBookBuilder: (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder
/// 文本渲染器工厂
public var makeTextRenderer: (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer
/// 初始化依赖容器
/// - Parameters:
/// - environment: 显示环境实例
/// - makeParser: EPUB 解析器工厂闭包
/// - makePaginator: 分页器工厂闭包
/// - makeTextBookBuilder: 富文本书籍构建器工厂闭包
/// - makePlainTextBookBuilder: 纯文本书籍构建器工厂闭包
/// - makeTextRenderer: 文本渲染器工厂闭包
public init(
environment: any RDEPUBReaderDisplayEnvironment,
makeParser: @escaping () -> RDEPUBParser,
makePaginator: @escaping () -> RDEPUBPaginator,
makeTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextBookCache?, RDEPUBTextLayoutConfig) -> RDEPUBTextBookBuilder,
makePlainTextBookBuilder: @escaping (RDEPUBTextRenderer, RDEPUBTextLayoutConfig) -> RDPlainTextBookBuilder,
makeTextRenderer: @escaping (RDEPUBTextRenderingEngine) -> RDEPUBTextRenderer
) {
self.environment = environment
self.makeParser = makeParser
self.makePaginator = makePaginator
self.makeTextBookBuilder = makeTextBookBuilder
self.makePlainTextBookBuilder = makePlainTextBookBuilder
self.makeTextRenderer = makeTextRenderer
}
/// 默认生产环境依赖,使用系统屏幕环境和标准组件实现
public static var live: RDEPUBReaderDependencies {
RDEPUBReaderDependencies(
environment: RDEPUBUIScreenEnvironment(),
makeParser: { RDEPUBParser() },
makePaginator: { RDEPUBPaginator() },
makeTextBookBuilder: { renderer, cache, layoutConfig in
RDEPUBTextBookBuilder(renderer: renderer, cache: cache, layoutConfig: layoutConfig)
},
makePlainTextBookBuilder: { renderer, layoutConfig in
RDPlainTextBookBuilder(renderer: renderer, layoutConfig: layoutConfig)
},
makeTextRenderer: { engine in
switch engine {
case .dtCoreText:
return RDEPUBDTCoreTextRenderer()
}
}
)
}
}