当我将@objc 推理更改为关闭时,为什么我的 UIPickerView 项目不显示(在我转换为 Swift 4 的项目中)?

Why won't my UIPickerView items display when I change @objc inference to off (on project I converted to Swift 4)?

这是我的应用 运行 转换为 Swift 4.2(来自 3.x)后的部分快照。您可以看到我的 UIPickerView 中的项目确实正确显示。

但是,如果我更新项目并将 objc 推断更改为关闭(而不是打开)——XCode 建议更改此设置——那么我的 UIPickerView 不会显示项目,尽管它们在包含在列表中。

UIPickerView 的快照似乎是空的

这里的应用 运行 显示了一个空的 UIPickerView,但如您所见,我选择了删除项目。但是,在它的后面你可以看到UIPickerView好像是空的。

这是在 UIPickerView 中加载项目的基本代码

public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
    if (siteKeyPickerValues != nil){
        return siteKeyPickerValues.count
    }
    return 0
}

public func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
    if (siteKeyPickerValues != nil && siteKeyPickerValues.count > 0){
        return siteKeyPickerValues[row]
    }
    return nil
}

siteKeyPickerValues(字符串数组)已初始化

siteKeyPickerValues 似乎也正确初始化了。这里是 运行 处于调试模式,@objc 推理关闭:

以前(在 Swift 3.x 和 XCode 的早期版本下),我按以下方式设置了 MainControllerView,并且工作正常:

class MainViewController: UIViewController, UIPickerViewDelegate, UITextFieldDelegate

在@matt 发表评论后,我只是做了一个更改并添加了 UIPickerViewDataSource,如下所示:

class MainViewController: UIViewController, 
UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate

我重建了 @objc 推理设置为默认(或关闭)和 运行 程序,现在我在 UIPickerView 中看到了预期的项目。

问题解决了。 我想知道这是最近的更改还是之前碰巧有效?