[英]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.