Tôi đang chuyển đổi mã Swift 2 mà biên dịch và chạy đến Swift 3 và đang nhận được lỗi sau:Swift 3 chuyển đổi được 'INT1' không phải là chuyển đổi thành 'Bool'
'Int1' is not convertible to 'Bool'
Mã này là như sau :
isUpdated = sharedInstance.database!.executeUpdate(
"UPDATE Coin_Table SET upgrade=?, grade=?, WHERE coin_id=?",
withArgumentsInArray: [
coinInfo.upgrade, (coinInfo.grade != nil) ? coinInfo.grade! : NSNull(),
coinID])
Đoạn mã trên được sử dụng FMDB với phương pháp quy định tại FMDB.h như
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;
Khi biên dịch abov mã của tôi e nó gắn cờ "(coinInfo.grade! =" và đưa ra lỗi.
Tôi đã cố gắng đơn giản hóa nó để xem nếu nó vẫn sẽ xảy ra:
let theArray: NSArray = [true ? "foo" : NSNull()]
và vẫn nhận được lỗi tương tự, lần này nó cờ "true".
tôi đã thực hiện một loạt các tìm kiếm về vấn đề này và đã không tìm thấy bất cứ điều gì khác hơn là gần https://bugs.swift.org/browse/SR-2372 nhưng đó là một vấn đề với các bộ mà tôi sẽ không nghĩ sẽ ảnh hưởng đến mã của tôi.
Có ai có thể làm sáng tỏ điều này hoặc đề xuất cách giải quyết nếu đó là lỗi trình biên dịch không?
Cảm ơn
'Builtint.Int1' là đại diện nội bộ của 'Bool' struct (' tài sản _value' của struct) và kiểu này xuất hiện trong thông báo lỗi/cảnh báo thường trỏ đến hành vi không dự định từ trình biên dịch. Nó có vẻ như là báo cáo lỗi bạn liên kết loại giải thích hành vi này là tốt> trình biên dịch không thể suy ra loại kết quả của hoạt động ternary. Ví dụ. sử dụng chuỗi ký tự để khởi tạo rõ ràng một cá thể 'NSString' (thay vì tin tưởng trình biên dịch) sẽ phá vỡ lỗi (' let theArray: NSArray = [true? NSString (string: "foo"): NSNull()] '). – dfri
Cảm ơn bạn đã bình luận. Tôi thực sự đã đơn giản hóa mã thực tế mà tôi đã sử dụng để đăng câu hỏi của mình vì tôi đã có nhiều lần chèn trên cùng một dòng nên phương pháp này có thể hơi khó sử dụng đối với tôi. Đã đi với cách tiếp cận nhiệt độ vars dưới đây. – KevinR