В Swift, почему я не должен всегда возвращать ожидаемые типы, как показано в справочных документах? - PullRequest
0 голосов
/ 07 мая 2018

Неоднократно работая над учебными пособиями по изучению Swift, я заметил, что такие методы, как UITableViewDataSource's tableView(_:cellForRowAt:), требуют, чтобы мы возвращали тип UITableViewCell, который я реализовывал много раз, однако для таких методов, как NSSpeechSynthesizer startSpeaking(_:), я был возможность вызвать этот метод без возврата ожидаемого логического значения. Что я не понимаю или почему?

class MainWindowController: NSWindowController {

    @IBOutlet weak var textField: NSTextField!
    @IBOutlet weak var speakButton: NSButton!
    @IBOutlet weak var stopButton: NSButton!

    let speechSynth = NSSpeechSynthesizer()

    override var windowNibName: NSNib.Name? {
        return NSNib.Name("MainWindowController")
    }

    override func windowDidLoad() {
        super.windowDidLoad()

    }

    // MARK: - Action methods
    @IBAction func speakIt(sender: NSButton) {

        //Get tuype-in text as a strin
        let string = textField.stringValue
        if string.isEmpty {
            print("string from \(textField) is empty")
        } else {
            speechSynth.startSpeaking(string)
        }
    }

    @IBAction func stopIt(sender: NSButton) {
        speechSynth.stopSpeaking()
    }
}

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы вызываете startSpeaking со строкой (Здесь вы Отправитель в параметре Получатель в ответ)

func startSpeaking(_ string: String) -> Bool // feedback from system

и ожидайте, что система вернет true / false

но в (Здесь вы Отправитель в ответ Получатель в параметре)

func tableView(_ tableView: UITableView,
 cellForRowAt indexPath: IndexPath) -> UITableViewCell  // feedback to system

вы предоставляете системе (Tableview) контент, который он должен показывать при реализации tableView

0 голосов
/ 07 мая 2018

startSpeaking возвращает Bool. Вы решили не использовать это возвращаемое значение. И вы на самом деле не реализовали метод startSpeaking, поэтому вам не нужно ничего возвращать. В качестве вызывающей стороны вы решаете использовать возвращаемое значение или нет.

Вы можете написать:

if speechSynth.startSpeaking(string) == false {
    // Uh oh, it didn't start speaking
}

Другой способ взглянуть на это - существует большая разница между , реализующим метод и , вызывающим метод. Ваш пример с методом источника данных табличного представления является примером, который вы реализуете . Вызов startSpeaking является примером вызова метода.

...