Saya baru dalam swift dan saya sudah mencoba masalah ini selama beberapa jam. Di bawah kode saya:
/* [1] error in this line */if filteredCustomReqList != nil {
for i in 0..<filteredCustomReqList?.count {
tempObj = filteredCustomReqList[i] as! [AnyHashable: Any]
bezeichString = tempObj?["bezeich"] as! String
specialRequestLabel.text = ("\(filteredString), \(bezeichString!)")
print (bezeichString!)
}
}
kesalahan mengatakan:
binary operator cannot be applied to operands of type int and int?
dimana:
var filteredCustomReqList: [Any]? /* = [Any]() */
jika saya menggunakan var filteredCustomReqList: [Any] = [Any]()
kesalahan hilang tetapi kondisi if saya selalu benar. Bagaimana cara memperbaikinya? Saya telah membaca this tetapi tidak sama dengan kasus saya (int
dan CGFloat
).
Setiap jawaban dan saran akan membantu saya. Terima kasih sebelumnya
Anda dapat menggunakan Optional Binding if let
untuk membuka variabel opsional filteredCustomReqList
.
var filteredCustomReqList: [Any]?
if let filteredCustomReqList = filteredCustomReqList {
for i in 0..<filteredCustomReqList.count {
tempObj = filteredCustomReqList[i] as! [AnyHashable: Any]
bezeichString = tempObj?["bezeich"] as! String
specialRequestLabel.text = ("\(filteredString), \(bezeichString!)")
print (bezeichString!)
}
}
Anda harus menggunakan pengikatan opsional sehingga Anda tidak memiliki opsional di baris untuk
.
if let list = filteredCustomReqList {
for i in 0..<list.count {
}
}
Bahkan lebih baik lagi menggunakan loop for
yang lebih baik:
if let list = filteredCustomReqList {
for tempObj in list {
bezeichString = tempObj["bezeich"] as! String
}
}
Tetapi untuk melakukan ini, deklarasikan filteredCustomReqList
dengan benar:
var filteredCustomReqList: [[String: Any]]?
Ini membuatnya menjadi array yang berisi kamus yang memiliki kunci String
dan nilai Any
.
Baris ini terlihat mencurigakan:
for i in 0..<filteredCustomReqList?.count {
Secara khusus, filteredCustomReqList?.count
adalah tipe Int?
(Int
opsional), karena optional chaining. Artinya, jika larik filteredCustomReqList
adalah non-nol, maka ia akan memberikan nilai dari properti count
(yaitu, jumlah elemennya). Tetapi jika filteredCustomReqList
adalah nil
, itu disebarkan dan filteredCustomReqList?.count
adalah nil
juga.
Untuk mencakup kedua kemungkinan tersebut, Swift menggunakan tipe opsional Int?
(yang dapat merepresentasikan nilai Int
yang valid dan nil
).
Ini tidak setara dengan Int
, dan dengan demikian tidak dapat digunakan dalam ekspresi yang mengekspresikan dua Int
(seperti rentang dalam loop for
Anda).
Anda tidak dapat menggunakan Int?
sebagai batas atas range loop for Anda; itu tidak masuk akal. Anda harus membuka bungkus larik sebelum perulangan:
if let count = filteredCustomReqList?.count {
// count is of type "Int", not "Int?"
for i in 0..<count {
// etc.