簡體   English   中英

無法分配“字符串”類型的值? 輸入“用戶?”

[英]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 ,屬性userUser類型,即

var user: User? {
    ....
}

現在,在toChatPressed(_:)方法中,您將userID的值設置為chatController's user如您的代碼所示,

let user = jobDetails?.userID 

這里userID是一個String? . 那么,上面代碼中的userString?類型的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM