Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法调用类型为';工作';具有类型为';(文本:字符串?,作业图像:UIImage?';_Ios_Swift - Fatal编程技术网

Ios 无法调用类型为';工作';具有类型为';(文本:字符串?,作业图像:UIImage?';

Ios 无法调用类型为';工作';具有类型为';(文本:字符串?,作业图像:UIImage?';,ios,swift,Ios,Swift,当我尝试在以下代码中添加jobImage时,出现“无法使用类型为“(text:String?,jobImage:UIImage?)的参数列表调用类型为“Job”的初始值设定项”的错误: let newJob = Job(text: textView.text, jobImage: takenImage) 这是根据作业的代码。swift var jobImage: UIImage! init(text: String, jobImage: UIImage, addedByUser: Strin

当我尝试在以下代码中添加jobImage时,出现“无法使用类型为“(text:String?,jobImage:UIImage?)的参数列表调用类型为“Job”的初始值设定项”的错误:

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()
}

您知道如何解决此错误吗?

根据您的签名,如果让绑定传递所有参数,则需要使用

if let image = takenImage, let text = textView.text  {    
   let newJob = Job(text: text, jobImage: image, addedByUser: addedByUser, userImage: userImage)
}

您的
init
需要以下类型的参数:

String, UIImage, String, UIImage
你通过了

String?, UIImage?
如果您知道总是传递
文本
作业图像
,但并不总是分配其他属性,请将它们设置为可选

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)
}

解决这个问题的两个办法,

解决方案1:

将参数保留为
可选

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:

按照方法定义传递方法调用中的所有必需值

let newJob = Job(text: textView.text, jobImage: image, addedByUser: "addedUser", userImage: userImage)

您还需要提供
addedByUser:
userImage
参数。如果不想这样做,可以为该参数提供默认值,如
addedByUser:String=“”