【问题标题】:Swift: Cannot assign value of type 'Item?' to type 'Item?.Type'斯威夫特:无法分配“项目”类型的值?键入“项目?类型”
【发布时间】:2017-07-15 20:27:53
【问题描述】:

我有一个名为 Item 的类,具有以下属性:

var name: String
var photo: UIImage?
var description: String?
var favorite: Bool

init 方法如下所示:

init?(name: String, photo: UIImage?, description: String?,
    favorite: Bool) {

    guard !name.isEmpty else {
        return nil
    }

    self.name = name
    self.photo = photo
    self.description = description
    self.favorite = favorite
}

在 ViewController 中,我试图像这样设置变量“item”:

var item = Item?

该项目是可选的,因为它只会在用户按下保存按钮时创建。但是,有一个错误说“类型名称之后的预期成员名称或构造函数调用”。我之前在类似的 Meal 课程中使用过同一行,没有问题。

当我尝试使用此代码创建项目时:

    let name = nameTextField.text ?? ""
    let photo = photoImageView.image
    let favorite = favoriteButton.favorite
    let description = descriptionTextView.text

    item = Item(name: name, photo: photo, description: description, favorite: favorite)

错误提示“无法分配 'Item?' 类型的值?”键入'Item?.Type'(又名'Optional.Type')”。我是 Swift 新手,不确定发生了什么以及问题出在哪里。

【问题讨论】:

    标签: ios swift class


    【解决方案1】:

    类型名称后的预期成员名称或构造函数调用

    表示任一

    var item = Item() // constructor call
    

    var item = Item.foo // member name, foo is some type property
    

    要声明一个没有默认值的可选,你必须写

    var item : Item?
    

    您的混合表单var item = Item? 的语法无效。

    【讨论】:

      【解决方案2】:

      您的意思是将item 声明为该类的成员,然后再实例化它吗?如果是这样,

      var item = Item?
      

      应该是

      var item: Item?
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多