在Swift中的类参数上使用类函数

在Swift中的类参数上使用类函数,swift,class,Swift,Class,我正在尝试使用一个类func来设置一本书的标题,但是它不起作用。请参阅下面我的代码: import Foundation class Book: NSObject { var bookTitle: String = "" var bookPage: String = "" override init(){ print("Book object has been created") } class func setPageTitl

我正在尝试使用一个类func来设置一本书的标题,但是它不起作用。请参阅下面我的代码:

import Foundation

class Book: NSObject {

    var bookTitle: String = ""
    var bookPage: String = ""

    override init(){
        print("Book object has been created")
    }



    class func setPageTitle(title: String)
    {
        bookTitle = title //I get the error here
    }

}
我想强制在创建图书对象时设置页面标题


有人能帮我吗?

设置任何必需的属性/属性的最佳方法是初始化它。因此,请尝试以这种方式对类进行编码:

class Book: NSObject {

    var bookTitle: String = ""
    var bookPage: String = ""

    init(title:String) {
        bookTitle = title
        print("Book object has been created")
    }

}
几点注意:

  • 您的错误是因为您在
    setPageTitle
    函数中声明了
    class
    。这毫无意义
  • 有更好的(和其他)方法来设置书名,包括在初始化之后。但是,您特别想确保在初始化时有一个标题,所以就这样做了
  • 维护bookTitle属性肯定有更好的方法。(大多数语言都会教你一开始就持有价格变量。)我主要是想给你一种在类中初始化价格变量的方法
  • 您可能不需要(或不需要)进行任何超类调用,但也可能不需要将Book类设置为NSObject

  • 当您没有实例时,尝试设置实例变量。将
    书名设置为静态。你到底想干什么?为什么
    setPageTitle
    是一个类函数?为什么不将
    bookTitle
    公开?如果希望在init上设置标题,为什么要提供默认值?如果是
    NSObject
    子类,可能应该调用
    super.init()
    。或者,正如你所说,根本不要把它变成
    NSObject
    子类。@Rob,我同意。我的回答是针对这个问题的。如果您将任何内容子类化,则应调用
    super
    ,除非有特定的理由不这样做。