2016-06-26 5 views
10

Ich wollte über Xcode 8 Beta springen und meinen Code konvertieren, aber ich stehe hier vor einer Art Problem, ich verwende Google Analytics SDK, um Ereignisse zu senden, und so habe ich es in Swift 2.2 verwendet :Kann Wert von Typ NSMutableDictionary nicht konvertieren? zum erwarteten Argumenttyp [NSObject: AnyObject]!

let tracker = GAI.sharedInstance().defaultTracker 
    tracker?.set(kGAIScreenName, value: "ViewController") 
    let builder = GAIDictionaryBuilder.createScreenView() 
    tracker?.send(builder?.build() as [NSObject:AnyObject]) 

Aber jetzt will ich 3 Swift verwenden, mir seine erzählt:

Wert kann nicht vom Typ NSMutableDicationary konvertieren eingeben [NSObject: ANYOBJECT] in Zwang.

Antwort

17

Sie benötigen eine Variable, um Ihre NSMutableDictionary dann zu halten, um es zu send() Methode übergeben.

let dictionary = (builder?.build())! as NSMutableDictionary 
tracker?.send(dictionary as [NSObject: AnyObject]!) 

UPDATE: Eine andere saubere Art und Weise in Swift verwenden 3

guard let tracker = GAI.sharedInstance().defaultTracker else { return } 
tracker.set(kGAIScreenName, value: "ViewController") 
guard let builder = GAIDictionaryBuilder.createScreenView() else { 
return } 
tracker.send(builder.build() as [NSObject:AnyObject]) 
+0

oder Tracking? bauen er? .build())! als NSMutableDictionary) als [NSObject: AnyObject]!) –

+1

Lifesaver! Vielen Dank! – LinusGeffarth

2

Ich denke, das Problem dadurch lösen. Es ist immer gut, Optionale auszupacken, bevor Sie sie direkt verwenden, andernfalls können Sie später bereuen. Tracker .send (((:

if let tracker = GAI.sharedInstance().defaultTracker, builder = GAIDictionaryBuilder.createScreenView() 
{     
    if let dict = builder.build(), mutableDict = dict as [NSObject: AnyObject]? 
    { 
     tracker.send(mutableDict) 
    } 
} 
0

SWIFT 3

für Code unter Verwendung Bildschirm Tracking

func trackScreen(screenName:String){ 
      let tracker = GAI.sharedInstance().defaultTracker  
      tracker?.set(kGAIScreenName, value: screenName) 
      let builder:NSObject = GAIDictionaryBuilder.createScreenView().build()  
      tracker?.send(builder as! [NSObject:AnyObject]) 
     } 

für Event

func eventTracking(){ 
    let tracker = GAI.sharedInstance().defaultTracker 
    let builder:NSObject = GAIDictionaryBuilder.createEvent(
    withCategory:"categoryName", 
    action:"ok button Clicked", 
    label:"button name", 
    value:nil).build() 
    tracker?.send(builder as! [NSObject:AnyObject]) 
    }