swift-关联性/范型

一、关联性/范型的使用列子

1.1 Step 1: 定义协议 MaterialProcessor

protocol MaterialProcessor {
    associatedtype Input
    func process(input: Input) async -> String
}

这个协议表示任何符合 MaterialProcessor 的类型都能 async 处理输入,返回一个代表“处理结果”的 String(比如文件名、路径、预览图 URL)。

1.2 Step 2: 定义两个处理器

struct ImageProcessor: MaterialProcessor {
    func process(input: String) async -> String {
        // 假设 input 是图片路径
        return "Processed image thumbnail for \(input)"
    }
}

struct VideoProcessor: MaterialProcessor {
    func process(input: String) async -> String {
        // 假设 input 是视频路径
        return "Processed video thumbnail for \(input)"
    }
}

actor MaterialThumbnailRender<Processor: MaterialProcessor> {
    let processor: Processor

    init(processor: Processor) {
        self.processor = processor
    }

    func render(input: Processor.Input) async -> String {
        await processor.process(input: input)
    }
}

1.3 Step 3: 定义泛型 actor

actor MaterialThumbnailRender<Processor: MaterialProcessor> {
    let processor: Processor

    init(processor: Processor) {
        self.processor = processor
    }

    func render(input: Processor.Input) async -> String {
        await processor.process(input: input)
    }
}

这个 actor 内部持有一个具体的 processor,并通过 render(input:) 方法调用其处理逻辑,是线程安全的。

1.4 Step 4: 使用泛型 actor

func testRender() async {
    let imageRenderer = MaterialThumbnailRender(processor: ImageProcessor())
    let videoRenderer = MaterialThumbnailRender(processor: VideoProcessor())

    let imageResult = await imageRenderer.render(input: "image.jpg")
    let videoResult = await videoRenderer.render(input: "video.mp4")

    print(imageResult) // 输出:Processed image thumbnail for image.jpg
    print(videoResult) // 输出:Processed video thumbnail for video.mp4
}

func testDataProcessor() async {
    let data = "HelloThumbnail".data(using: .utf8)!
    let dataRenderer = MaterialThumbnailRender(processor: DataProcessor())

    let result = await dataRenderer.render(input: data)
    print(result)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值