Skip to content

Instantly share code, notes, and snippets.

@Hrayr2112
Created February 11, 2023 17:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hrayr2112/28f3177d23c81402a1f0bce74d0680ab to your computer and use it in GitHub Desktop.
Save Hrayr2112/28f3177d23c81402a1f0bce74d0680ab to your computer and use it in GitHub Desktop.
Swift Quiz
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()
@Hrayr2112
Copy link
Author

  1. Лучше при создании протокола, указывать AnyObject, а не class, есть разница
  2. Class Reader надо пометить final, так как нет наследований, что оптимизирует его создание
  3. Output надо указать weak, чтобы не было retain cycle’ов
  4. file указывать через force unwrapped не есть хорошо. Лучше сделать его опционалом и в функции read использовать его через if let, а лучше guard в начале метода, так как без файла вся функция не имеет смысла
  5. try лучше использовать через do catch
  6. Опять же избавится от force uwrapped для data
  7. Я бы покрыл протоколом класс Reader, чтобы Мы могли через DI отдать его классу orderReader, так же Мы будем следовать принципу D из солида. Этот класс так же должен быть final)
  8. переменные и функции должны быть приватны
  9. для filePath тоже надо убрать forceUwrapped
  10. Для ресурсов лучше иметь какую-нибудь кодогенерацию, чтобы не писать через стринг доступ к файлам

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment