2016-10-12 24 views
8

Sau khi chuyển sang Swift 3, tôi nhận được một lỗi khi tôi cố gắng và làm:Issue với NSLog với Swift 3

self.publicDB.save(listRecord, completionHandler: { (record, error) -> Void in 
     if let saveError = error { 
      NSLog("There was an error saving the record: %@", saveError) 
     }... 

Ai đó có thể cho tôi biết tại sao điều này là gì và những gì tôi có thể làm sản xuất một sản lượng tương đối dễ dàng ?

Lỗi là NSLog unavailable: variadic function unavailable.

+0

là gì lỗi? – AdamPro13

+0

@ AdamPro13 xem cập nhật. – BlackHatSamurai

+0

http://stackoverflow.com/questions/39867667/nslog-statements-not-showing-for-ios-10-in-apple-configurator/39868101#comment67027314_39868101 – iMHitesh

Trả lời

9

Vấn đề, mặc dù cá trích đỏ "variadic", là chúng tôi không còn nhận được cầu nối tự động vào loại Mục tiêu-C nữa; bạn phải băng qua cây cầu một cách rõ ràng, chính bạn. Viết saveError as NSError để nhận đối tượng kiểu Objective-C.

+1

Cảm ơn bạn đã trả lời. Thông báo lỗi cực kỳ gây hiểu nhầm. – BlackHatSamurai

6

NSLog không hoạt động với đối tượng Swift và lỗi mà trình xử lý hoàn tất vượt qua là Lỗi không phải NSError.

Vì vậy, thay đổi mã của bạn để

self.publicDB.save(listRecord, completionHandler: { (record, error) -> Void in 
     if let saveError = error as? NSError { 
      NSLog("There was an error saving the record: %@", saveError) 
     }... 

hoặc viết thực hiện của riêng bạn Lỗi đó mở rộng CustomDebugStringConvertible giao thức

class MyError: Error, CustomDebugStringConvertible { 
    var debugDescription: String { 
     return "The cause of error is xxx" 
    } 
} 

và sau đó thiết lập kết thúc phát ra MyError hơn Error

+0

Đáng chú ý tương tự như những gì tôi đã nói ... – matt

+0

@matt Xin lỗi, tôi không muốn sao chép câu trả lời của bạn, có lẽ tốt hơn nếu tôi xóa câu trả lời và chỉnh sửa câu trả lời của mình? –

+0

Hoặc: nếu bạn đang mã hóa trong Swift, mương 'NSLog()' hoàn toàn và sử dụng 'print()' :-) –

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