Size: a a a

2020 August 13

M

Muhiddin Shukurov in SwiftBook
Спасибо
источник

DA

Dmitry Alekseev in SwiftBook
Artur Ponomarenko
enum FuncError: Error {
   case incorrectDigitCount
}

let requiredDigitCount = 5

func myFunc(_ number: Int) throws {
   let numberString = String(number)
   guard numberString.count == requiredDigitCount else {
       throw FuncError.incorrectDigitCount
   }
   
   numberString.forEach {
       print($0)
   }
}

try? myFunc(12345)
Ты же понимаешь, что это тестовое задание, которое ты решил за него и он теперь ничему не научится ?
источник

A

Alexander in SwiftBook
Dmitry Alekseev
Ты же понимаешь, что это тестовое задание, которое ты решил за него и он теперь ничему не научится ?
+
источник

A

Alexander in SwiftBook
Да еще и вряд ли поймет, что делает этот код, зачем там throw и прочее
источник

G

Georgy in SwiftBook
Y
Ну примерно копию notes хочу написать, в нем есть создание таблицы где можно добавлять строки и колонки и внутри вписывать текст. Можете подсказать в какую сторону смотреть?
Думаю, примерно в сторону таблиц, динамического изменения датасорса - это если про таблицы..
источник

SS

Savely Sakun in SwiftBook
Всем привет, подскажите, пожалуйста, по делегатам. Хочу сделать так, чтобы при нажатии на ячейку таблицы я через протокол передал array на другой контроллер.

Правильно ли я понимаю, что порядок реализации должен быть следующий:

1) Создаём протокол, например:

protocol CharactersControllerDelegate: class {
   func fetchCharacters(_ characters: [Character])
}


2) Далее в классе CharactersController создаём weak var delegate:

weak var delegate: CharactersControllerDelegate?

3) В классе CharactersController используем делегат. Например так:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

delegate?.fetchCharacters(characters)
let vc = ProfileController()
navigationController?.pushViewController(vc, animated: true)
}


4) В другом классе (у меня это ProfileController) мы этот протокол "принимаем":

override func viewDidLoad() {
       super.viewDidLoad()
       
       CharactersController().delegate = self
}


5) Используем метод из протокола (в моё примере через расширение):

extension ProfileController: CharactersControllerDelegate {
   func fetchCharacters(_ characters: [Character]) {
       DispatchQueue.main.async {
           print(characters)
       }
   }
}


Подскажите, пожалуйста, достаточно ли данных действий? Или я что-то упустил? В моём случае в классе ProfileController даже не происходит обращение к функции протокола.

В чём может быть косяк?
источник

А

Анастасия in SwiftBook
Savely Sakun
Всем привет, подскажите, пожалуйста, по делегатам. Хочу сделать так, чтобы при нажатии на ячейку таблицы я через протокол передал array на другой контроллер.

Правильно ли я понимаю, что порядок реализации должен быть следующий:

1) Создаём протокол, например:

protocol CharactersControllerDelegate: class {
   func fetchCharacters(_ characters: [Character])
}


2) Далее в классе CharactersController создаём weak var delegate:

weak var delegate: CharactersControllerDelegate?

3) В классе CharactersController используем делегат. Например так:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

delegate?.fetchCharacters(characters)
let vc = ProfileController()
navigationController?.pushViewController(vc, animated: true)
}


4) В другом классе (у меня это ProfileController) мы этот протокол "принимаем":

override func viewDidLoad() {
       super.viewDidLoad()
       
       CharactersController().delegate = self
}


5) Используем метод из протокола (в моё примере через расширение):

extension ProfileController: CharactersControllerDelegate {
   func fetchCharacters(_ characters: [Character]) {
       DispatchQueue.main.async {
           print(characters)
       }
   }
}


Подскажите, пожалуйста, достаточно ли данных действий? Или я что-то упустил? В моём случае в классе ProfileController даже не происходит обращение к функции протокола.

В чём может быть косяк?
Может будет проще инициализировать новый VC через convenience init (array: [Character]) и передать данные непосредственно в didSelectRowAt indexPath?
источник

PS

Pavel Subach in SwiftBook
а как будет переход осуществляться ?
источник

PS

Pavel Subach in SwiftBook
если через Segue то в prepareForSegue передаете массив непосредственно контроллеру, а в didSelect сохраняете выбранный индекс, и вызываете segue 🙂
источник

SS

Savely Sakun in SwiftBook
Pavel Subach
а как будет переход осуществляться ?
через navigationController?.pushViewController. Поэтому не вариант с сегвеем. Т.е. меня в первую очередь интересует как осуществить то что я задумал с помощью делегатов. Использование prepareForSegue всё же другое 🙁
источник

SS

Savely Sakun in SwiftBook
Анастасия
Может будет проще инициализировать новый VC через convenience init (array: [Character]) и передать данные непосредственно в didSelectRowAt indexPath?
Спасибо большое за совет!
источник

PS

Pavel Subach in SwiftBook
а конвиниенс создаст контроллер которому требуется require init(coding: NSCoding) ?
источник

AY

Andrey Yastrebov in SwiftBook
Savely Sakun
Всем привет, подскажите, пожалуйста, по делегатам. Хочу сделать так, чтобы при нажатии на ячейку таблицы я через протокол передал array на другой контроллер.

Правильно ли я понимаю, что порядок реализации должен быть следующий:

1) Создаём протокол, например:

protocol CharactersControllerDelegate: class {
   func fetchCharacters(_ characters: [Character])
}


2) Далее в классе CharactersController создаём weak var delegate:

weak var delegate: CharactersControllerDelegate?

3) В классе CharactersController используем делегат. Например так:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

delegate?.fetchCharacters(characters)
let vc = ProfileController()
navigationController?.pushViewController(vc, animated: true)
}


4) В другом классе (у меня это ProfileController) мы этот протокол "принимаем":

override func viewDidLoad() {
       super.viewDidLoad()
       
       CharactersController().delegate = self
}


5) Используем метод из протокола (в моё примере через расширение):

extension ProfileController: CharactersControllerDelegate {
   func fetchCharacters(_ characters: [Character]) {
       DispatchQueue.main.async {
           print(characters)
       }
   }
}


Подскажите, пожалуйста, достаточно ли данных действий? Или я что-то упустил? В моём случае в классе ProfileController даже не происходит обращение к функции протокола.

В чём может быть косяк?
Для такого сценария делегаты не нужны
источник

SS

Savely Sakun in SwiftBook
Andrey Yastrebov
Для такого сценария делегаты не нужны
ну вот допустим я всё же хочу использовать делегат (учусь)
источник

AT

Andrey Torlopov in SwiftBook
Dmitry Alekseev
Ты же понимаешь, что это тестовое задание, которое ты решил за него и он теперь ничему не научится ?
И пусть. 🤷‍♂️ что в этом плохого?
источник

b

bosya in SwiftBook
Savely Sakun
Всем привет, подскажите, пожалуйста, по делегатам. Хочу сделать так, чтобы при нажатии на ячейку таблицы я через протокол передал array на другой контроллер.

Правильно ли я понимаю, что порядок реализации должен быть следующий:

1) Создаём протокол, например:

protocol CharactersControllerDelegate: class {
   func fetchCharacters(_ characters: [Character])
}


2) Далее в классе CharactersController создаём weak var delegate:

weak var delegate: CharactersControllerDelegate?

3) В классе CharactersController используем делегат. Например так:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

delegate?.fetchCharacters(characters)
let vc = ProfileController()
navigationController?.pushViewController(vc, animated: true)
}


4) В другом классе (у меня это ProfileController) мы этот протокол "принимаем":

override func viewDidLoad() {
       super.viewDidLoad()
       
       CharactersController().delegate = self
}


5) Используем метод из протокола (в моё примере через расширение):

extension ProfileController: CharactersControllerDelegate {
   func fetchCharacters(_ characters: [Character]) {
       DispatchQueue.main.async {
           print(characters)
       }
   }
}


Подскажите, пожалуйста, достаточно ли данных действий? Или я что-то упустил? В моём случае в классе ProfileController даже не происходит обращение к функции протокола.

В чём может быть косяк?
Очень смущает присваивание делегата, если вы объект никуда не записываете, то и работать не будет
источник

AT

Andrey Torlopov in SwiftBook
Pavel Subach
а конвиниенс создаст контроллер которому требуется require init(coding: NSCoding) ?
Если не используются ксибы-сториборды, то этот метод не нужен.
источник

А

Анастасия in SwiftBook
Savely Sakun
ну вот допустим я всё же хочу использовать делегат (учусь)
Допустим у вас в table view указан массив для делегирования новому контроллеру, в контроллере, в том который содержит в себе данный table view, есть переменная, которая его объявляет. К этой переменой и нужно указать делегат
источник

SS

Savely Sakun in SwiftBook
bosya
Очень смущает присваивание делегата, если вы объект никуда не записываете, то и работать не будет
это который пункт 4?

CharactersController().delegate = self
источник

b

bosya in SwiftBook
Savely Sakun
это который пункт 4?

CharactersController().delegate = self
Угу
источник