面试题答案
一键面试- 协议定义:
- 首先定义一个协议,用于
DataFetcher
向ViewController
传递获取到的数据。
protocol DataFetching { func fetchData(completion: @escaping (Data?) -> Void) }
- 再定义一个协议,用于
ViewController
将获取到的数据传递给DataProcessor
进行处理。
protocol DataProcessing { func process(data: Data?) }
- 首先定义一个协议,用于
- 类对协议的遵循及实现:
DataFetcher
类:
class DataFetcher: DataFetching { func fetchData(completion: @escaping (Data?) -> Void) { // 这里进行网络请求获取数据的实际逻辑 // 假设使用 URLSession 进行网络请求 let url = URL(string: "https://example.com/api/data")! let task = URLSession.shared.dataTask(with: url) { (data, response, error) in if let error = error { print("Error fetching data: \(error)") completion(nil) return } completion(data) } task.resume() } }
DataProcessor
类:
class DataProcessor: DataProcessing { func process(data: Data?) { if let data = data { // 这里进行数据处理的实际逻辑 let string = String(data: data, encoding:.utf8) print("Processed data: \(string?? "No valid string from data")") } else { print("No data to process") } } }
ViewController
类:
class ViewController { let dataFetcher: DataFetching let dataProcessor: DataProcessing init(dataFetcher: DataFetching, dataProcessor: DataProcessing) { self.dataFetcher = dataFetcher self.dataProcessor = dataProcessor } func startDataFlow() { dataFetcher.fetchData { [weak self] data in self?.dataProcessor.process(data: data) } } }
- 使用示例:
let fetcher = DataFetcher() let processor = DataProcessor() let viewController = ViewController(dataFetcher: fetcher, dataProcessor: processor) viewController.startDataFlow()
在上述代码中:
- 定义了
DataFetching
和DataProcessing
两个协议,分别规范了数据获取和数据处理的行为。 DataFetcher
类遵循DataFetching
协议,实现从网络获取数据的逻辑,并通过闭包将获取到的数据返回。DataProcessor
类遵循DataProcessing
协议,实现对获取到的数据进行处理的逻辑。ViewController
类持有DataFetching
和DataProcessing
类型的实例,并在startDataFlow
方法中通过调用DataFetcher
获取数据,然后将数据传递给DataProcessor
进行处理。