2017-04-06 21 views
0

我有以下幾行代碼:如何在''中修復這個結果值? :'表達式有不匹配的類型'String'和'[Any]?'

let string:String = "" 
let extracted_data:String! = (response?.extracted_data == nil) ? "" : response?.extracted_data 
string.append("\(extracted_data)") 

extracted_data[Any]。我想不通爲什麼我收到此錯誤:

Result values in '? :' expression have mismatching types 'String' and '[Any]?'

+0

你的預期類型是字符串和響應.extracted_data是一種[陣列] –

+0

'[任何]'是一個數組,是不相關的'String'。什麼樣的靜態類型是'Any'? – vadian

+0

@anilkukdeja你能解釋一下我在做這個代碼有什麼問題嗎?我已經嘗試將字符串更改爲[Array],但沒有運氣 – devSA

回答

2

你應該分析你的變量,數組和[任何]類型以後,如果你知道你的數組包含字符串類型,你應該做的喜歡這個。就拿第一要素了陣列,並設置你的價值

response?.extracted_data?.first as? String ?? "Default Value if string is not present" 
+0

爲什麼它被降低了?通過這樣做 –

1

由三元運算符? :需要是同一類型的返回值,因爲斯威夫特需要在編譯時知道什麼類型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) 
+0

let extracted_data = response?.extracted_data ?? [],extacted_data仍然是[],但我只想顯示第一個元素,所以我基本上做extract_data.first – devSA

+0

你的問題並沒有說明你只想打印第一個值。 – vacawama

+0

你的'[Any]'數組包含什麼類型的數據? – vacawama

相關問題