0

プロジェクトで sqlite.swift を使用しています。

let inputdata = row as Row

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

「inputdata」を渡すことができません

inputdata は AnyObject 、私の場合は Row になります

エラーがスローされます。これを解決するのを手伝ってください。または、この行オブジェクトを別のコントローラーに渡す別の方法を教えてください。

ここに画像の説明を入力

4

1 に答える 1

1

このように userInfo 経由で渡すことができます

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

そして、プロパティを持つNSNotificationオブジェクトからこれを取得できますuserInfo

func handleNotification(notification: NSNotification){
    print(notification.userInfo)
    print(notification.userInfo!["inputData"])
}

Rowが の場合struct、最初にそれをクラス オブジェクトにラップする必要があります。その後、クラス オブジェクトをこの関数に渡すことができます。

ラッパー クラスを作成する

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)   

inputData を取り戻す

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)
        }

    }
}
于 2015-11-11T15:27:39.620 に答える