Created
February 11, 2023 17:00
-
-
Save Hrayr2112/28f3177d23c81402a1f0bce74d0680ab to your computer and use it in GitHub Desktop.
Swift Quiz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
protocol ReaderDelegate: class { | |
func didReadData(data: Data) | |
} | |
class Reader{ | |
var file: String! | |
var output: ReaderDelegate? | |
var readCompleteBlock: (() -> Void)? | |
func read() { | |
let fileUrl = URL(fileURLWithPath: file!) | |
let data = try? Data(contentsOf: fileUrl) | |
self.output?.didReadData(data: data!) | |
self.readCompleteBlock?(); | |
} | |
} | |
class orderReader: ReaderDelegate { | |
public var reader: Reader | |
init(_ file: URL) { | |
self.reader = Reader() | |
self.reader.file = file.absoluteString.replacingOccurrences(of: "file://", with: "") | |
self.reader.output = self | |
self.reader.readCompleteBlock = { | |
self.didComplete() | |
} | |
} | |
func Read() { | |
self.reader.read() | |
} | |
func didComplete() { | |
print("end of file") | |
} | |
func didReadData(data: Data) { | |
print("\(data)") | |
} | |
} | |
let filePath = Bundle.main.path(forResource: "myOrders.csv", ofType: nil) | |
let orderReader = orderReader(URL(fileURLWithPath: filePath!)) | |
orderReader.Read() |
Author
Hrayr2112
commented
Feb 11, 2023
- Лучше при создании протокола, указывать AnyObject, а не class, есть разница
- Class Reader надо пометить final, так как нет наследований, что оптимизирует его создание
- Output надо указать weak, чтобы не было retain cycle’ов
- file указывать через force unwrapped не есть хорошо. Лучше сделать его опционалом и в функции read использовать его через if let, а лучше guard в начале метода, так как без файла вся функция не имеет смысла
- try лучше использовать через do catch
- Опять же избавится от force uwrapped для data
- Я бы покрыл протоколом класс Reader, чтобы Мы могли через DI отдать его классу orderReader, так же Мы будем следовать принципу D из солида. Этот класс так же должен быть final)
- переменные и функции должны быть приватны
- для filePath тоже надо убрать forceUwrapped
- Для ресурсов лучше иметь какую-нибудь кодогенерацию, чтобы не писать через стринг доступ к файлам
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment