簡體   English   中英

無法分配“字符串??”類型的值鍵入“字符串?” 錯誤

[英]Cannot assign value of type 'String??' to type 'String?' error

假設我定義了一個 class

class Dummy {

    var title: String?
}

我有一本字典

let foo: [Int: String?]  = [:]

然后當我進行如下分配時

var dummy = Dummy()

dummy.title = foo[1]

它說

無法分配“字符串??”類型的值鍵入“字符串?”

插入 ' 作為! 細繩'

foo的返回類型是String? Dictionary在使用下標時返回其值類型的可選,但什么是String?? 輸入 swift?

我認為進行這樣的分配應該是合法的。 為什么它會抱怨,我應該如何做這個作業

由於字典foo中的鍵 1 對應的值是可選的,並且字典中的值是String? 它返回類型String?? . 解開該值一次以檢查該值是否存在將解決此問題

if let value = foo[1] {
    dummy.title = value
}

通過將您的字典聲明為[Int:String?]您是說鍵是Int並且值是可選的String s。 現在鍵可能不存在於字典中,所以foo[1]可選地返回一個可選的,你最終得到一個可選的可選 - String??

現在,雖然有時可以使用可選選項,但我認為在這種情況下這不是您想要的。

您可以簡單地制作[Int:String]的字典,然后如果值為nil則不插入元素。

let foo: [Int: String]  = [:]
dummy.title = foo[1]

如果您確實需要處理“此鍵有一個值並且它是nil ”的情況,那么 nil-coalescing 運算符可能會幫助您:

dummy.title = foo[1] ?? nil

甚至

dummy.title = foo[1] ?? ""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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