2016-09-17 23 views
13

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".

Screenshot of error

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

+0

'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

+0

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

Trả lời

4

Như bạn đã viết cho mình vấn đề của bạn là giống như một trong những mô tả here. Lỗi xảy ra))

Tại sao không chỉ để sử dụng một biến tạm thời để khắc phục:

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

Cảm ơn, điều này đã cho tôi vượt qua vấn đề, đã không sử dụng "Bất kỳ" trước đây. – KevinR

+0

Đôi khi lỗi này hiển thị khi bạn có lỗi khác trong mã của mình. Tôi đã nhầm lẫn về nó, nhưng sau này tôi đã tìm ra có một lỗi khác trên dòng đó mà xcode không báo cáo, và khi tôi sửa lỗi đó, lỗi này biến mất. – csga5000

Các vấn đề liên quan