【问题标题】:Why can't I use the array's append() in Swift?为什么我不能在 Swift 中使用数组的 append()?
【发布时间】:2015-09-09 20:49:34
【问题描述】:

我得到一个:Cannot invoke 'append' with an argument list of type '([Book])' 如果我使用+=,它可以找到,但我不明白为什么append() 不起作用。

struct Book
{
    var title:String
    var pageCount:Int
}

class Library
{
    var onShelfBooks:[Book] = []
    var onLoanBooks:[Book] = []
    var books:[Book]
    {
        get
        {
            return onShelfBooks + onLoanBooks
        }

        set(newBook)
        {
            onShelfBooks.append(newBook)
        }
    }
}

【问题讨论】:

    标签: arrays swift struct append


    【解决方案1】:

    Append 只允许您一次添加一个对象,而 += 允许您将一组对象与另一个对象组合。当您在 setter 上调用 append 时,您正在尝试添加书籍对象数组,或 [Book] 而不仅仅是单个书籍对象。

    【讨论】:

      【解决方案2】:
      struct Book
      {
          var title:String
          var pageCount:Int
      }
      
      class Library
      {
          var onShelfBooks:[Book] = []
          var onLoanBooks:[Book] = []
          var books:[Book]
          {
              get
              {
                  return onShelfBooks + onLoanBooks
              }
      
              set(newBook)
              {
                  onShelfBooks.append(newBook[0])
              }
          }
      }
      
      var myLibrary = Library()
      
      var newBook = Book(title: "Swift Development with Cocoa", pageCount: 453)
      
      myLibrary.books = [newBook]
      
      myLibrary.books
      

      【讨论】:

        【解决方案3】:

        如果您想通过 append 添加 [newBook],您可以使用 : of
        1- onShelfBooks.append(contentsOf: 新书)
        “contentOf”是序列的类型。
        否则使用:
        2- onShelfBooks += newBook

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-26
          • 1970-01-01
          • 2016-11-15
          • 1970-01-01
          • 1970-01-01
          • 2021-10-22
          相关资源
          最近更新 更多