快速获取错误

问题描述 投票:0回答:1

我对编码和从事需要整理笔记本的项目还是新手。由于某种原因,我的移动函数给了我这个问题:“无法将类型'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)
}
swift syntax-error
1个回答
0
投票

您的函数在逻辑上有一个小问题:您试图递归调用 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)

变更说明

  1. 查找当前索引:
  • 使用
    note.id
    确保
    ordered
    存在于
    firstIndex(of:)
    中。
  1. 验证目标位置:
  • 检查
    position
    是否在有效范围内(
    0
    ordered.count - 1
    )。
  • 确保当前索引与目标位置不同(无操作)。
  1. 执行移动:
  • id
    中的当前索引中删除注释的
    ordered
  • 将其插入新位置。
  1. 返回结果:
  • 如果移动成功则返回
    (true, position)
  • 如果备注不存在或位置无效,则返回
    (false, nil)
© www.soinside.com 2019 - 2024. All rights reserved.