2016-09-17 11 views
13

ben derler ve Swift 3'e çalışır ve aşağıdaki hatayı alıyorum Swift 2 kod dönüştürme ediyorum şu şekildedir:Swift 3 dönüşüm 'INT1' alır dönüştürülebilir değil 'Bool'

'Int1' is not convertible to 'Bool'

kodudur :

isUpdated = sharedInstance.database!.executeUpdate(
"UPDATE Coin_Table SET upgrade=?, grade=?, WHERE coin_id=?", 
withArgumentsInArray: [ 
coinInfo.upgrade, (coinInfo.grade != nil) ? coinInfo.grade! : NSNull(), 
coinID]) 

benim kod abov derleme yukarıda

- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments; 

olarak FMDB.h tanımlanan yönteme FMDB kullanarak kod e "(coinInfo.grade! =" işaretler) ve hata verir.

let theArray: NSArray = [true ? "foo" : NSNull()] 

ve hala bu sefer bayraklar "gerçek" Aynı hatayı alıyorum:

ben hala ne olacağını görmek için basitleştirerek çalıştı.

Screenshot of error

bu aramalara ilişkin bir demet yaptık ve https://bugs.swift.org/browse/SR-2372 dışındaki yakın bir şey bulamadım ama bu benim kod etkileyecek düşünmek olmaz küpe ile bir konudur.

Bu konuda biraz ışık tutabilir veya derleyici bir hata olması durumunda geçici bir çözüm önerilebilir mi?

Teşekkür

+0

'Builtint.Int1'' Bool' yapının iç gösterimi ('yapının _value' özelliktir) ve bu tür bir hata/uyarı iletisinde ortaya çıkar, genellikle derleyici tarafından amaçlanan davranışa işaret eder. Bu davranış türünü de bağladığınız gibi davranıyor gibi görünüyor bu davranış da> derleyici, üçlü işlemin sonucunun türünü çıkaramaz. Örneğin. bir 'NSString' örneğini (derleyiciye güvenmek yerine) açık bir şekilde başlatmak için dize değişmezini kullanarak, hatayı (= theArray: NSArray = [true? NSString (string: "foo"): NSNull()] ') atlatır. – dfri

+0

Yorum için teşekkürler. Ben aslında aynı satırda birden fazla ekler vardı benim soru gönderme için kullandığım gerçek kodu basitleştirmişti bu yüzden bu yöntem benim için biraz tuhaf olurdu. Aşağıda temp vars yaklaşım ile gitti. – KevinR

cevap

4

Bir tek here açıklandığı gibi Sorununuz aynıdır kendini yazdığı gibi. Hatalar

Neden sadece bunu düzeltmek için geçici bir değişken kullanmamayı)) olur:

let hasGrade: Any = (coinInfo.grade != nil) ? coinInfo.grade! : NSNull() 
isUpdated = sharedInstance.database!.executeUpdate(
"UPDATE Coin_Table SET upgrade=?, grade=?, WHERE coin_id=?", 
withArgumentsInArray: [ 
coinInfo.upgrade, hasGrade, 
coinID]) 
+0

Teşekkürler, bu konuyu geçmemi sağladı, daha önce "Any" kullanmamıştı. – KevinR

+0

Bazen bu hata, kodunuzda farklı bir hata olduğunda gösterilir. Bunun hakkında kafam karışmıştı, ama daha sonra xcode'un rapor etmediği bir başka hata olduğunu farkettim ve bunu düzeltdiğimde bu hata ortadan kalktı. – csga5000