无法使用类型为 '(text: String?, jobImage: UIImage?)' 的参数列表调用类型 'Job' 的初始值设定项



当我尝试在以下代码中添加 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?

如果您知道您总是传递textjobImage但并不总是分配其他属性,请将其设置为可选

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时,您必须解开textViewtakenImage的可选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)
}

相关内容

最新更新