无法将“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 的工作方式,非可选字段只能是定义的类型。可选意味着它的类型可以是GymHours
或nil
@Siva 完全相同的评论 Simon McLoughlin以上是关于无法将“NSNull”类型的值转换为预期的参数类型的主要内容,如果未能解决你的问题,请参考以下文章
Swift:无法将“NSDate”类型的值转换为预期的参数类型“NSDateComponents”
无法将“()”类型的值转换为预期的参数类型“(() -> Void)?”在 swiftui
无法将类型 '(Any) -> ()' 的值转换为预期的参数类型 '(_) -> _'