swift - 无法将类型 'Int' 的值转换为预期参数类型 '_?'

标签 swift

注意:我是 Swift 新手

我正在使用Former .

我正在从领域模型中获取数据。

let industries = realm.objects(Industry)

然后我尝试从中定义一个 InlinePickerItem 列表:

$0.pickerItems = industries.map({ industry in
    return InlinePickerItem(title: industry.name, value: industry.id)
})

但 XCode 一直提示:无法将“Int”类型的值转换为预期的参数类型“_?”,指向 industry.id

我错过了什么吗?我不知道这个问题是来自前者还是来 self 不理解的 Swift 内容。例如_是什么类型?

更新:

@dfri 评论后,尝试失败。从我对 Swift 的一点了解来看,我知道 Swift 迷失了。因此,我从闭包中提取了 InlinePickerItem 列表的初始化。

    let industries = realm.objects(Industry)
    let inlinePickerItems = industries.map({ industry in
        return InlinePickerItem(title: industry.name, displayTitle: nil, value: industry.id)
    })
    let catRow = InlinePickerRowFormer<ProfileLabelCell, String>(instantiateType: .Nib(nibName: "ProfileLabelCell")) {
        $0.titleLabel.text = "CATEGORY".localized
    }.configure {
        $0.pickerItems = inlinePickerItems
    }

调用InlinePickerItem(title:industry.name,displayTitle:nil,value:industry.id)时错误消失了,但在将其分配给 $0.pickerItems<时我得到了新的东西 现在是:

Cannot assign value of type '[InlinePickerItem<Int>]' to type '[InlinePickerItem<String>]'

希望这能为您提供一些有用的提示。

最佳答案

将数组分配给不同类型数组时类型不匹配

重构代码后(“更新”之后)现在很明显错误的根源是什么。

不可变 catRow类型为InlinePickerRowFormer<ProfileLabelCell, String> 。从[InlinePickerRowFormer]的来源我们看到该类及其属性pickerItems声明如下

public class InlinePickerRowFormer<T: UITableViewCell, S where T: InlinePickerFormableRow>
: ... {

    // ...

    public var pickerItems: [InlinePickerItem<S>] = []

    // ...
}

这里的关键是,例如 InlinePickerRowFormer<T,S>它的属性pickerItems将是一个元素类型为 InlinePickerItem<S> 的数组。在上面的示例中 SString

let catRow = InlinePickerRowFormer<ProfileLabelCell, String>
                                               /*       |
                                                        S = String */

因此pickerItemsInlinePickerItem<String> 的数组实例。

但是,您尝试附加不可变的 inlinePickerItemspickerItems ,这意味着您正在尝试分配 InlinePickerItem<Int> 的数组元素类型为 InlinePickerItem<String> 的数组的实例;自然会导致类型不匹配。

您可以通过以下方式解决此类型不匹配问题:

  • 设置您的 catRow不可变为 InlinePickerRowFormer<ProfileLabelCell, Int> 类型.

关于swift - 无法将类型 'Int' 的值转换为预期参数类型 '_?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36552580/

相关文章:

swift - 使用枚举键向 Swift 字典添加值

swift - 如何关闭模态视图 Controller 并刷新以前的 View Controller

ios - TouchID with KeyChain - 输入密码屏幕出现格式错误 (Swift)

ios - 将闭包保存为变量理解

ios - 我用 "EEE MMM dd HH:mm:ss z yyyy"得到了 dateFormatter 的异常

ios - 在 Swift 中设置呈现模态的自定义大小失败——占用全屏

ios - 通过点击状态栏滚动到顶部 TableView 不起作用(有很多 subview )SWIFT

ios - 从函数的返回类型推断类型为泛型

iOS:如何在没有 someView.addConstraints 的情况下使用 constraintsWithVisualFormat?

swift - 循环多个 UIAlertController