2016-06-17 26 views
13

Tôi đang sử dụng nhanh chóng 3.0 và đang cố gắng thêm số huy hiệu vào ứng dụng của mình. Tôi tin rằng cách chính xác để làm điều này là tương tự như những gì dưới đây.Thay đổi cú pháp Swift 3.0 cho UIUserNotificationSettings

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert | 
      UIUserNotificationType.Badge, categories: nil 
      )) 

application.applicationIconBadgeNumber = 5 

Tuy nhiên, tôi gặp lỗi khi sử dụng '|' trong khối UIUserNotificationSettings và cũng sẽ nhận được lỗi "Nhãn đối số (choTypes, danh mục) không khớp với bất kỳ quá tải nào có sẵn" cho UIUserNotificationSettings nếu tôi chỉ có đối số đầu tiên là UIUserNotificationType.badge. Đã nhanh chóng 3,0 thay đổi cú pháp cho tuyên bố này?

+5

* Tất cả cú pháp * thay đổi với Swift 3, nhưng bạn thậm chí còn là tiền tố Swift 2. Hãy xem http://stackoverflow.com/a/30763344/1187415 và sau đó bắt đầu "Chuyển đổi sang hiện tại Swift Cú pháp "chuyển đổi trong Xcode. Hoặc đọc tài liệu. –

+0

Tôi không thể quan tâm đến điểm số, nhưng bạn nên thay đổi câu trả lời đúng cho câu hỏi này khi nó thay đổi với iOS 10.0. Đó là một câu hỏi rất phổ biến và mọi người nên biết câu trả lời đúng là gì bây giờ, – Pierce

Trả lời

33

Nó đã được cập nhật trong cả Swift 2 và Swift 3. Dòng này sẽ khắc phục sự cố của bạn. Ngoài ra hãy chắc chắn rằng bất kỳ dòng nào khác với UIUserNotificationType đã có các biến của chúng được chuyển sang chữ thường.

let settings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) 
+0

Nên được đánh dấu là câu trả lời hợp lệ –

+3

Swift 3 + iOS 10 sử dụng UNNotificationSettings https://developer.apple.com/reference/usernotifications/unnotificationsettings – markturnip

+3

' UIUserNotificationSettings' hiện đã không được chấp nhận cho iOS 10.0. Tôi đã đăng câu trả lời bên dưới như cú pháp được đề xuất hiện tại. – Pierce

14

Từ những gì tôi hiểu, UIUserNotificationSettings đã không được chấp nhận cho iOS 10.0. Bây giờ bạn nên sử dụng UNUserNotificationCenter.

Đây là những gì tôi đã làm để đảm bảo mã của tôi đã lên đến date:

1) Nhập khuôn khổ UserNotifications trong bạn AppDelegate

import UserNotifications

2) Bên trong didFinishLaunchingWithOptions chức năng bên trong AppDelegate, thêm như sau:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in 

     if granted { 
      UIApplication.shared.registerForRemoteNotifications() 
     } 

    } 

    return true 
} 

Khi bạn có thông báo đăng ký và cho phép, bạn có thể thay đổi số huy hiệu bất cứ lúc nào:

UIApplication.shared.applicationIconBadgeNumber = value

này làm việc cho tôi, tôi chỉ thử nghiệm nó bằng cách gửi một thông báo từ xa để điện thoại của tôi, và nó làm việc tốt. Hi vọng điêu nay co ich.

+2

có, bạn trả lời là thực tế cho iOS 10.0 Cảm ơn –

2

"rawValue" có thể sử dụng | nhà điều hành.

Mã này hoạt động trong swift3, chúng tôi không cần phải làm điều đó.

let types = UIUserNotificationType(rawValue:UIUserNotificationType.alert.rawValue | UIUserNotificationType.sound.rawValue | UIUserNotificationType.badge.rawValue) 

application.registerUserNotificationSettings(UIUserNotificationSettings(types: types, categories: nil)) 
Các vấn đề liên quan