在通知标题中显示函数结果(Swift 3,iOS10)[关闭]

Posted

技术标签:

【中文标题】在通知标题中显示函数结果(Swift 3,iOS10)[关闭]【英文标题】:Display result of function in notification title (Swift 3, iOS10) [closed] 【发布时间】:2017-01-25 21:53:18 【问题描述】:

我正在 ios10 中从我的 Swift 3 应用程序触发本地通知,虽然我可以让通知正常触发,但我正在尝试传递一个变量(恰好是从函数返回的值)作为通知标题的一部分。它不显示该变量的内容,而是显示为“(函数)”。

我在应用程序中使用与标签文本相同的变量,没有任何问题。

我创建了以下类和类函数来安排通知:

class notificationController 

class func scheduleNotification(at date: Date, header: String, body: String) 

    let calendar = Calendar(identifier: .gregorian)
    let components = calendar.dateComponents(in: .current, from: date)
    let newComponents = DateComponents(calendar: calendar, timeZone: .current, month: components.month, day: components.day, hour: components.hour, minute: components.minute)

    let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false)

    let content = UNMutableNotificationContent()
    content.title = NSString.localizedUserNotificationString(forKey: header, arguments: nil)
    content.body = body
    content.sound = UNNotificationSound.default()

    let request = UNNotificationRequest(identifier: "textNotification", content: content, trigger: trigger)

    UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
    UNUserNotificationCenter.current().add(request) (error) in
        if let error = error 
            print("error: \(error)")
        
    



然后我在与主屏幕关联的视图控制器的viewdidload() 函数中定义要传递给该函数的变量,然后调用scheduleNotification 函数:

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ss"
        let strDate = "25/01/2017 21:21:00"
        let notificationDate = dateFormatter.date(from: strDate)
        let dayNumber = String(describing: (playerArray[0]?.calculateDays)!)
        let header = "Welcome to day \(dayNumber) of your life"
        var body : String = ""

    if(infoArray.count > 0) 
        body = (infoArray[0]?.text)!
    else body = "Doesn't it feel great to be alive?"

        notificationController.scheduleNotification(at: notificationDate!, header: header, body: body)

PlayerArray 是一个包含一个 Player CoreData 对象的数组。我在 Player 类中创建了以下函数来计算玩家的年龄:

public class Player: NSManagedObject 

func calculateDays() -> Int 

    let currentCalendar = Calendar.current
    guard let dob = currentCalendar.ordinality(of: .day, in: .era, for: self.dob as! Date) else 
        return 0
    
    guard let today = currentCalendar.ordinality(of: .day, in: .era, for: Date()) else 
        return 0
    
    let days = today - dob

    return days



dayNumber 变量不会显示的任何原因?我觉得我错过了一些显而易见的事情。任何想法都会很神奇。

【问题讨论】:

在dayNumber创建后下断点,看看值是多少。 有趣,值是“(函数)”(一个字符串)所以这就是问题所在。知道为什么会这样吗?我在网上找不到任何东西 因为你是命名函数calculateDays,而不是调用它。 答案见下文。您是在要求它描述每个人都在说的函数本身,而不是它产生的价值 感谢大家的回复 【参考方案1】:

你需要用()调用函数

改变这个:

    let dayNumber = String(describing: (playerArray[0]?.calculateDays)!)

到这里:

    let dayNumber = String(describing: (playerArray[0]?.calculateDays())!)

【讨论】:

以上是关于在通知标题中显示函数结果(Swift 3,iOS10)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

火力基地 |远程通知不显示,swift 3.0

Swift 3 Firebase 远程通知未在 TestFlight 上显示

如何在前台 iOS Swift 3.0 中接收推送通知?

远程通知中的自定义声音 iOS 10,swift 3

是否可以理解 swift 3 中何时发出通知?

从 Swift 3 中的锁定屏幕清除本地通知