Swift: как лучше загрузить два файла?
Я хочу загрузить 2 файла и показать их данные в 2 разных strings. Я пытаюсь сделать это так, и вроде все работает нормально. Но я думаю, что это не лучшее решение создавать 2 функции Может нужно обеднить их в одну а ссылки добавить в массив? Как сделать более элегантное решение?
var saleNumber1 = ""
var saleNumber2 = ""
override func viewDidLoad() {
super.viewDidLoad()
sale1()
sale2()
}
func sale1() {
let url = URL(string: "http://example.com/folder/sale1.txt")!
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
guard let data = data else { return }
saleNumber1 = "\(String(data: data, encoding: .utf8)!)"
}
task.resume()
}
func sale2() {
let url = URL(string: "http://example.com/folder/sale2.txt")!
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
guard let data = data else { return }
saleNumber2 = "\(String(data: data, encoding: .utf8)!)"
}
task.resume()
}
Ответы (1 шт):
Да, ваше направление мысли верное. Можно сделать массив:
var links:[String] = ["http://example.com/folder/sale1.txt", "http://example.com/folder/sale2.txt"]
сделать один метод в который будет передаваться как-бы номер документа:
func download(num: Int){
let url = URL(string: links[num])!
let task = URLSession.shared.dataTask(with: url) {(data, response, error) in
guard let data = data else { return }
switch num {
case 1:
saleNumber1 = "\(String(data: data, encoding: .utf8)!)"
case 2:
saleNumber2 = "\(String(data: data, encoding: .utf8)!)"
default:
print("не удалось распознать число")
}
}
task.resume()
}
так же я думаю что можно уйти от массива, так как у вас отличаются только порядковые номера документов, поэтому в методе можно напрямую вставлять номер документа в стринг:
let url = URL(string: String(format: "http://example.com/folder/[email protected]", num))!
вот тут есть вопрос про template в swift. Ну а вызывать можно в цикле и просто передавать индекс цикла начиная с 1:
for index in 1...2 {
download(index)
}