2017-02-24 58 views
2

我有一个叫项具有以下属性类:Swift:无法分配'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 
} 

在视图控制器,我想instate变量“项目”,例如:

var item = Item? 

该项目是可选的,因为当用户按下保存按钮只会被创建。但是,有一个错误说“预期的成员名称或类型名称后的构造函数调用”。之前我没有遇到任何问题,我曾经使用过类似的餐食类。

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

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?.Type'(又名'Optional.Type')“。我对Swift很陌生,不确定发生了什么以及问题出在哪里。

回答

2

您是否想要将item声明为类的成员,然后再实例化它?如果是这样,

var item = Item? 

应该

var item: Item? 
1
类型名称后

预期的会员名称或构造函数调用

意味着要么

var item = Item() // constructor call 

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

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

var item : Item? 

混合形式var item = Item?是无效的语法。

相关问题