在 Swift 中,为什么我不必始终返回参考文档中所示的预期类型?



在反复学习 Swift 的教程时,我注意到像UITableViewDataSource'stableView(_: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()
}
}

startSpeaking确实返回一个Bool。您选择不使用该返回值。而且您实际上并没有实现startSpeaking方法,因此您不是必须返回任何内容的人。作为调用方,您可以选择是否使用返回值。

你可以这样写:

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

另一种看待这个问题的方式 -实现方法和调用方法之间存在很大差异。您正在使用表视图数据源方法的示例。调用startSpeaking调用方法的一个示例。

你用一个字符串调用startSpeaking(在这里你是参数接收方中的发送者(

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

并期望系统返回真/假

但在(这里你是返回的发送者 参数中的接收者(

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

您向系统(表视图(提供他在实现表视图时必须显示的内容

最新更新