由三元運算符? :
需要是同一類型的返回值,因爲斯威夫特需要在編譯時知道什麼類型extracted_data
會。您正試圖返回String
或[Any]?
。要解決此問題,請返回空數組[]
而不是nil
案例的空字符串""
。此外,您需要拆開response
,以便response!.extracted_data
返回[Any]
而不是[Any]?
。雖然用!
強行解包可能會導致崩潰,但這是安全的,因爲您已經知道response
不是nil
由於您的檢查。
var string: String = "" // This needs to be a var for append to work
let extracted_data = response?.extracted_data == nil ? [] : response!.extracted_data
string.append("\(extracted_data)")
print(string)
現在看這條線:
let extracted_data = response?.extracted_data == nil ? [] : response!.extracted_data
斯威夫特有這樣做的更好的方法以特殊零合併運算??
。它用於打開可選值或爲該值爲nil
時提供默認值。使用??
,該行變成了:
let extracted_data = response?.extracted_data ?? []
我想這是一個簡單的例子,因爲你可以只分配給string
,而不是追加。在任何一種情況下,字符串都需要被修改並且其類型可以推斷出來var
。這裏是代碼的最終版本:
var string = ""
let extracted_data = response?.extracted_data ?? []
string.append("\(extracted_data)")
print(string)
也許你不希望[]
當response == nil
,打印。在這種情況下,有? :
返回一個String
像這樣:
var string = ""
let extracted_data = response == nil ? "" : "\(response!.extracted_data)"
string.append(extracted_data)
print(string)
如果你想打印只是你[Any]
數組的第一個項目,它真的可以是任何類型的,那麼你可以這樣做:
var string = ""
let first = response?.extracted_data.first
let extracted_data = first == nil ? "" : "\(first!)"
string.append(extracted_data)
print(string)
你的預期類型是字符串和響應.extracted_data是一種[陣列] –
'[任何]'是一個數組,是不相關的'String'。什麼樣的靜態類型是'Any'? – vadian
@anilkukdeja你能解釋一下我在做這個代碼有什麼問題嗎?我已經嘗試將字符串更改爲[Array],但沒有運氣 – devSA