当我尝试在以下代码中添加 jobImage 时,我得到"无法调用类型'Job'的初始值设定项,参数列表类型为'(文本:字符串?,jobImage:UIImage?)"作为错误:
let newJob = Job(text: textView.text, jobImage: takenImage)
这是根据作业的代码.swift
var jobImage: UIImage!
init(text: String, jobImage: UIImage, addedByUser: String, userImage: UIImage) {
self.text = text
self.jobImage = jobImage
self.addedByUser = addedByUser
self.userImage = userImage
ref = Database.database().reference().child("jobs").childByAutoId()
}
您知道我如何解决此错误吗?
解决此问题的两种方法,
解决方案 1:
将参数保留为optional
,
var text: String?
var jobImage: UIImage?
var addedByUser: String?
var userImage: UIImage?
init(text: String? = nil, jobImage: UIImage? = nil, addedByUser: String? = nil, userImage: UIImage? = nil) {
self.text = text
self.jobImage = jobImage
self.addedByUser = addedByUser
self.userImage = userImage
ref = Database.database().reference().child("jobs").childByAutoId()
}
let newJob = Job(text: textView.text, jobImage: takenImage)
解决方案 2:
按照方法defination
在方法调用中传递所有必需的值,
let newJob = Job(text: textView.text, jobImage: image, addedByUser: "addedUser", userImage: userImage)
您的init
需要以下类型的参数:
String, UIImage, String, UIImage
你正在通过
String?, UIImage?
如果您知道您总是传递text
和jobImage
但并不总是分配其他属性,请将其设置为可选
var text: String
var jobImage: UIImage
var addedByUser: String?
var userImage: UIImage?
然后,您可以使用可选属性的默认值创建init
,因此,如果您不将它们作为参数传递,没关系,属性将被nil
init(text: String, jobImage: UIImage, addedByUser: String? = nil, userImage: UIImage? = nil)
现在,当您想使用init
时,您必须解开textView
和takenImage
的可选text
属性
if let text = textView.text, let jobImage = takenImage {
let newJob = Job(text: text, jobImage: jobImage)
}
根据您的签名,您需要使用if let
绑定将所有参数传递为:
if let image = takenImage, let text = textView.text {
let newJob = Job(text: text, jobImage: image, addedByUser: addedByUser, userImage: userImage)
}