我对编码和从事需要整理笔记本的项目还是新手。由于某种原因,我的移动函数给了我这个问题:“无法将类型'Array.index'(又名'Int')的值转换为预期的参数类型'Note”。 这发生在返回移动线上。任何帮助将不胜感激。如果我需要上传更多代码,我愿意这样做。
func move(note: Note, to position: Int) -> (moved: Bool, position: Int?) {
guard let index = ordered.firstIndex(of: note.id) else {
return (false, nil)
}
return move(note: index, to: position)
}
您的函数在逻辑上有一个小问题:您试图递归调用 move(note:index, to:position),但似乎您传递了错误的类型(Int 而不是 Note)。以下是修复或重构它的方法:
func move(note: Note, to position: Int) -> (moved: Bool, position: Int?) {
guard let currentIndex = ordered.firstIndex(of: note.id) else {
return (false, nil)
}
guard position >= 0, position < ordered.count, currentIndex != position else {
return (false, nil)
}
ordered.remove(at: currentIndex)
ordered.insert(note.id, at: position)
return (true, position)
}
// Example
let note = Note(id: "note2")
let result = move(note: note, to: 1)
print("Move Result:", result) // Move Result: (moved: false, position: nil)
print("Ordered:", ordered)
变更说明
note.id
确保 ordered
存在于 firstIndex(of:)
中。position
是否在有效范围内(0
至ordered.count - 1
)。id
中的当前索引中删除注释的 ordered
。(true, position)
。(false, nil)
。