首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift:无法分配'Item?‘类型的值?键入'Item?.Type‘

Swift:无法分配'Item?‘类型的值?键入'Item?.Type‘
EN

Stack Overflow用户
提问于 2017-02-25 05:04:00
回答 2查看 7.7K关注 0票数 6

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

代码语言:javascript
复制
var name: String
var photo: UIImage?
var description: String?
var favorite: Bool

init方法如下所示:

代码语言:javascript
复制
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“:

代码语言:javascript
复制
var item = Item?

该项目是可选的,因为只有当用户按下保存按钮时才会创建该项目。但是,有一个错误说“期望的成员名称或构造函数调用后的类型名称”。我以前在类似的餐饮课程中使用过相同的线路,没有出现任何问题。

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

代码语言:javascript
复制
    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的新手,不确定发生了什么,问题出在哪里。

EN

回答 2

Stack Overflow用户

发布于 2017-02-25 05:07:43

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

代码语言:javascript
复制
var item = Item?

应该是

代码语言:javascript
复制
var item: Item?
票数 5
EN

Stack Overflow用户

发布于 2017-02-25 05:09:54

应在类型名称之后使用成员名称或构造函数调用

指的是

代码语言:javascript
复制
var item = Item() // constructor call

代码语言:javascript
复制
var item = Item.foo // member name, foo is some type property

要声明一个无默认值的可选类型,您必须编写

代码语言:javascript
复制
var item : Item?

您的混合表单var item = Item?不是有效语法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42448248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档