2016-06-26 30 views
10

Chciałem przeskoczyć, aby użyć beta Xcode 8 i przekonwertować mój kod, ale mam tu pewien problem, używam SDK Google Analytics do wysyłania zdarzeń i tak właśnie używałem go w Swift 2.2 :Nie można przekonwertować wartości typu NSMutableDictionary? do oczekiwanego typu argumentu [NSObject: AnyObject]!

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

Ale teraz chcę używać Swift 3, jego mówi mi:

nie można przekonwertować wartości typu NSMutableDicationary wpisać [NSObject: AnyObject] w przymus.

Odpowiedz

17

Musisz wykonać zmienną, aby zatrzymać swoją NSMutableDictionary, a następnie przekazać ją do metody send().

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

UPDATE: Innym czysty sposób na wykorzystanie w Swift 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

lub: tracker .send (((? budować er? .build())! jako NSMutableDictionary) jako [NSObject: AnyObject]!) –

+1

Lifesaver! Dziękuję Ci! – LinusGeffarth

2

myślę, że to rozwiąże problem. Zawsze dobrze jest rozwinąć opcje, zanim użyjesz ich bezpośrednio, w przeciwnym razie możesz pożałować później.

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

do użytku śledzenia ekran poniżej kod

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

dla zdarzenia Śledzenie

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]) 
    } 
Powiązane problemy