无法将“NSNull”类型的值转换为预期的参数类型

Posted

技术标签:

【中文标题】无法将“NSNull”类型的值转换为预期的参数类型【英文标题】:Cannot convert value of type 'NSNull' to expected argument type 【发布时间】:2018-05-09 10:15:02 【问题描述】:

在从 Objective-C 到 Swift 代码更改期间,我遇到了错误。谢谢

var sortedHours = gymDetail.hours.sorted(by:  ($0.startTime < $1.startTime) )
let gymdays = GymHours.orderedDays()
for i in 0..<(gymdays.count) 
    var pad = false
    if i >= sortedHours.count 
        pad = true
     else 
        let hours = sortedHours[i]
        print(GymHours.orderedDays()[i])
        if  (hours.day == GymHours.orderedDays()[i] as! String) 
            pad = true
        
    
    if pad 
        sortedHours.insert(nil, at: i)
    

我的错误屏幕

我的 Objective-C 代码:

[sortedHours insertObject:[NSNull null] atIndex:i];

【问题讨论】:

错误是不言自明的。该数组期望其内容为GymHours 类型,NSNull() 显然是NSNull 类型。你为什么要在那个数组中插入NSNull 发送 nil 将解决它,例如 [sortedHours insertObject:nil atIndex:i]; 这并不能回答问题:为什么要将某个其他类型(或 nil)的值插入到需要 GymHours 类型值的数组中? 你能打印这个print(GymHours.orderedDays()[i]) 然后试试sortedHours.insert("", at: i) 【参考方案1】:

这个数组sortedHours不是可选值

试试这个代码

 var sortedHours: [GymHours?] = gymDetail.hours.sorted(by:  ($0.startTime < $1.startTime) )
            let gymdays = GymHours.orderedDays()
            for i in 0..<(gymdays.count) 
                var pad = false
                if i >= sortedHours.count 
                    pad = true
                 else 
                    let hours = sortedHours[i]
                    print(GymHours.orderedDays()[i])
                    if  (hours.day == GymHours.orderedDays()[i] as! String) 
                        pad = true
                    
                
                if pad 
                    sortedHours.insert(nil, at: i)
                
            

【讨论】:

同样的错误 - Nil 与预期的参数类型不兼容 @Siva 告诉我你是如何使用它的,因为它对我有用 改成可选后逻辑也变了 @Siva 如果你想传入 nil,它需要是可选的。这就是 Swift 的工作方式,非可选字段只能是定义的类型。可选意味着它的类型可以是GymHoursnil @Siva 完全相同的评论 Simon McLoughlin

以上是关于无法将“NSNull”类型的值转换为预期的参数类型的主要内容,如果未能解决你的问题,请参考以下文章

无法将“字符串”类型的值转换为预期的参数类型 [任何]

Swift:无法将“NSDate”类型的值转换为预期的参数类型“NSDateComponents”

无法将“()”类型的值转换为预期的参数类型“(() -> Void)?”在 swiftui

无法将类型 '(Any) -> ()' 的值转换为预期的参数类型 '(_) -> _'

iOS-无法将“字符串”类型的值转换为预期的参数类型“数据”

错误:无法将类型“(_)->()”的值转换为预期的参数类型“(()-> Void)?”