[英]Cannot assign value of type 'String?' to type 'User?'
我尝试使用以下代码执行从按钮到特定用户 ID chatController 的转场:
@IBAction func toChatPressed(_ sender: Any) {
let user = jobDetails?.userID
let chatLogController = ChatLogController(collectionViewLayout: UICollectionViewFlowLayout())
chatLogController.user = user
navigationController?.pushViewController(chatLogController, animated: true)
}
但它给了我无法分配“字符串”类型的值? 输入“用户?” 作为错误...
chatController.user:
var user: User? {
didSet {
navigationItem.title = user?.name
observeMessages()
}
}
我从 tableViewCell 获取用户 ID 并保存在结构中
struct JobDetails {
var jobDetail: String
var userName: String
var userImage: UIImage?
var jobImage: UIImage?
var downloadURL: String?
var userLocation: String
var userID: String?
}
在chatController
,属性user
是User
类型,即
var user: User? {
....
}
现在,在toChatPressed(_:)
方法中,您将userID
的值设置为chatController's
user
如您的代码所示,
let user = jobDetails?.userID
这里userID
是一个String?
. 那么,上面代码中的user
是String?
类型的String?
chatLogController.user = user
在上面的代码中,您将user
(类型为String?
)分配给chatLogController.user
(类型为User
)。 这就是你的错误的意思。
解决方案:
可以有 2 个选项来解决该问题。
1.要么创建一个String?
类型的属性userID
String?
在chatLogController
,即
var userID: String?
现在,将它从toChatPressed(_:)
设置为,
chatLogController.userID = jobDetails?.userID
2.或者,您可以使用jobDetails
toChatPressed(_:)
中的toChatPressed(_:)
创建一个User
对象,然后将其设置为chatLogController's
user
,即
let user = User(jobDetails) //this depends upon the how you've defined User
chatLogController.user = user
如果您仍有任何困惑,请随时提问。
您正在分配JobDetails.userID: String?
到ChatLogController.user: User?
查看您的代码:
let user = jobDetails?.userID
…
chatLogController.user = user
您必须将jobDetails?.userID: String
映射到User?
.
在struct JobDetails
,添加一个包含User
对象的新字段:
struct JobDetails {
var jobDetail: String
var userName: String
var userImage: UIImage?
var jobImage: UIImage?
var downloadURL: String?
var userLocation: String
var userID: String?
var user: User? // <-- New field
}
每当您创建新的JobDetails
,将User
对象传递给user
字段。
现在,您的函数可以使用user
字段而不是userID
字段:
@IBAction func toChatPressed(_ sender: Any) {
let user = jobDetails?.user // <-- user of type User? instead of userID of type String?
let chatLogController = ChatLogController(collectionViewLayout: UICollectionViewFlowLayout())
chatLogController.user = user
navigationController?.pushViewController(chatLogController, animated: true)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.