如何使用 NSNotification 将 sqlite.swift 的行传递给另一个控制器

How to pass Row of sqlite.swift to another controller using NSNotification

我在我的项目中使用 sqlite.swift。

let inputdata = row as Row

NSNotificationCenter.defaultCenter().postNotificationName("navigateToProductDetail",object: inputdata)

过不了"inputdata"

inputdata 将是 AnyObject ,在我的例子中是 Row

所以它抛出错误,帮助我解决这个问题或告诉我将此行对象传递给另一个控制器的替代方法

你可以像这样通过 userInfo 传递它

let userInfo = [ "inputData" : inputdata ]
NSNotificationCenter.defaultCenter().postNotificationName("navigateToProductDetail", object: nil, userInfo: userInfo)

并且您可以使用 userInfo 属性

NSNotification 对象中获取它
func handleNotification(notification: NSNotification){
    print(notification.userInfo)
    print(notification.userInfo!["inputData"])
}

如果 Row 是一个 struct ,首先你必须将它包装成一个 class 对象,然后你可以将 class 对象传递给这个函数。

创建包装器class

class Wrapper<T> {
    var wrappedValue: T
    init(theValue: T) {
        wrappedValue = theValue
    }
}    

换行

let wrappedInputData = Wrapper(theValue: inputdata)
let userInfo = [ "inputData" : wrappedInputData ]
NSNotificationCenter.defaultCenter().postNotificationName("navigateToProductDetail", object: nil, userInfo: userInfo)   

取回您的输入数据

func handleNotification(notification: NSNotification){
    print(notification.userInfo)

    if let info = notification.userInfo {
        if let wrappedInputData = info["inputData"] {
            let inputData : Row = (wrappedInputData as? Wrapper)!.wrappedValue
            print(inputData)
        }

    }
}