Cannot convert value of type

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Cannot convert value of type

    Guten Morgen zusammen,

    ich steh hier schon wieder kurz vor dem Herzkasper. Na gut so schlimm ist es dann auch wieder nicht aber eben kam das Xcode Update 7.0.1
    und wie nach jedem Update darf ich mir die Zeit nehmen und die ganze App fixen, da Apple sich wiedermal dazu entschieden hat Swift anzupassen.
    Es nervt und ich wünschte ich hätte Anfang des Jahres statt mit Swift direkt mit Objective-C angefangen.

    Lange Rede kurzer Sinn, es geht um folgendes Problem:

    Quellcode

    1. for elem in workWithData{
    2. let data_id: String = elem[0] as! String
    3. let data_typ: String = elem[1] as! String
    4. let data_cid: String = elem[2] as! String
    5. let data_re: String = elem[3] as! String
    6. }
    Diese For-Schleife nutze ich in so ziemlich jedem View um Daten, die vom Webserver kommen weiterzuverarbeiten.

    Nun kommt seit eben dieser Fehler:

    Cannot convert value of type 'String' to specified type 'String'

    Es gab wohl schonmal einen Bug in Xcode der genau diese Fehlermeldung rausgeworfen hat, allerdings soll dieser bereits gefixt sein.
    Google sagt mir nix, Apple Support Hotline ist geschlossen, Apple
    Support E-mail... naja bis nächstes Jahr auf Antwort warten macht weniger Sinn.

    Daher wollte ich euch mal fragen, ob ihr eine Idee habt.

    Danke euch viele Grüße
    David
  • Hallo,

    beim Problem kann ich Dir leider nicht helfen.
    Ich möchte aber anmerken, wenn Du schreibst "bei jedem", dann schreit das nach "Design-Fehler".

    Sobald ich etwas redundant schreibe bzw. etwas sich ähnelt, dann frage ich mich, ob meine Implementierung korrekt ist.

    D.h. dass sich nahezu immer eine Superklasse unterbringen lässt und nur einmal geschrieben und gepflegt werden muss.

    Nur so als Hinweis…

    Viele Grüße
  • little_pixel schrieb:

    Hallo,

    beim Problem kann ich Dir leider nicht helfen.
    Ich möchte aber anmerken, wenn Du schreibst "bei jedem", dann schreit das nach "Design-Fehler".

    Sobald ich etwas redundant schreibe bzw. etwas sich ähnelt, dann frage ich mich, ob meine Implementierung korrekt ist.

    D.h. dass sich nahezu immer eine Superklasse unterbringen lässt und nur einmal geschrieben und gepflegt werden muss.

    Nur so als Hinweis…

    Viele Grüße
    Hey little_pixel,

    ja da hast du vollkommen recht. Ich lager redundante Dinge auch eigentlich immer in Extensions / Superklassen aus, in diesem Fall
    ändert sich aber in jedem View der Inhalt der For-Schleife. Somit könnte ich höchstenfalls die Codezeile der Schleife selbst auslagern. :)

    Dennoch danke für deinen Hinweis!

    Viele Grüße
    David
  • DKCode schrieb:

    Quellcode

    1. for elem in workWithData{
    2. let data_id: String = elem[0] as! String
    3. let data_typ: String = elem[1] as! String
    4. let data_cid: String = elem[2] as! String
    5. let data_re: String = elem[3] as! String
    6. }

    Cannot convert value of type 'String' to specified type 'String'

    Daher wollte ich euch mal fragen, ob ihr eine Idee habt.

    Vielleicht ein wenig mehr Code? Playground?
  • Amin Negm-Awad schrieb:

    DKCode schrieb:

    Es nervt und ich wünschte ich hätte Anfang des Jahres statt mit Swift direkt mit Objective-C angefangen.
    Oh, die ersten Toten sind zu beklagen.
    Er kann ja den Lazarus machen, und vermöge Objective-C wieder auferstehen. ;)

    @DKCode: Ganz im Ernst, wenn du den Eindruck hast, mit Objective-C besser zurechtzukommen, dann steig um.
    „Meine Komplikation hatte eine Komplikation.“
  • SteveJ schrieb:

    DKCode schrieb:

    Quellcode

    1. for elem in workWithData{
    2. let data_id: String = elem[0] as! String
    3. let data_typ: String = elem[1] as! String
    4. let data_cid: String = elem[2] as! String
    5. let data_re: String = elem[3] as! String
    6. }

    Cannot convert value of type 'String' to specified type 'String'

    Daher wollte ich euch mal fragen, ob ihr eine Idee habt.
    Vielleicht ein wenig mehr Code? Playground?
    Wie viel Code brauchst denn? :D

    Quellcode

    1. func nowWork(postdata: String, action: String, url: String) -> [AnyObject]{
    2. let getData = getJSONData(action, postparam: postdata, url: url)
    3. var DataArray:[AnyObject] = []
    4. for elem: AnyObject in JSONParseArray(getData) {
    5. var DBDataSet:[String] = []
    6. let id = elem["id"] as! String
    7. let typ = elem["typ"] as! String
    8. let re = elem["re"] as! String
    9. let cid = elem["cid"] as! String
    10. DBDataSet.append(id)
    11. DBDataSet.append(typ)
    12. DBDataSet.append(cid)
    13. DBDataSet.append(re)
    14. DataArray.append(DBDataSet)
    15. }
    16. return DataArray
    17. }
    18. if(action == 1){
    19. let workWithData = nowWork("isdx="+###+"&tezs="+###,action: "1",url: "http://XYZ.php")
    20. for elem in workWithData{
    21. let data_id: String = elem[0] as! String < hier gibt es den error
    22. let data_typ: String = elem[1] as! String < hier gibt es den error
    23. let data_cid: String = elem[2] as! String < hier gibt es den error
    24. let data_re: String = elem[3] as! String < hier gibt es den error
    25. self.datastructarray.append(datastruct(id: data_id, typ: data_typ, cid: data_cid, re:data_re))
    26. }
    27. }
    Alles anzeigen


    Amin Negm-Awad schrieb:

    DKCode schrieb:

    Es nervt und ich wünschte ich hätte Anfang des Jahres statt mit Swift direkt mit Objective-C angefangen.
    Oh, die ersten Toten sind zu beklagen.
    Oh ja ganz kurz davor.


    macmoonshine schrieb:

    Amin Negm-Awad schrieb:

    DKCode schrieb:

    Es nervt und ich wünschte ich hätte Anfang des Jahres statt mit Swift direkt mit Objective-C angefangen.
    Oh, die ersten Toten sind zu beklagen.
    Er kann ja den Lazarus machen, und vermöge Objective-C wieder auferstehen. ;)
    @DKCode: Ganz im Ernst, wenn du den Eindruck hast, mit Objective-C besser zurechtzukommen, dann steig um.
    Ja der Gedanke ist da, aber da die App nun fast vor der Fertigstellung steht und komplett in Swift entwickelt ist, wäre ein Umstieg jetzt der falsche Zeitpunkt.
    Wobei ich es wie gesagt mittlerweile bereue, nicht gleich mit Objective-C angefangen zu haben. Aber hinterher ist man immer schlauer :whistling:

    Gibt es denn jetzt noch jemand der eine Idee hat, was hier plötzlich im Code falsch läuft? Ich mein es lief ja seit März ohne Probleme ;(
    (abgesehen von ein paar kleinen Swiftanpassungen bei jedem Update, die aber seitens Apple bisher immer kommuniziert wurden)
  • macmoonshine schrieb:

    DKCode schrieb:

    Ja der Gedanke ist da, aber da die App nun fast vor der Fertigstellung steht und komplett in Swift entwickelt ist, wäre ein Umstieg jetzt der falsche Zeitpunkt.
    Du schleppst den Sargnagel natürlich für jeden Bugfix und jede Erweiterung mit dir weiter herum.
    ja das wird leider vorerst nicht anders machbar sein.

    Dennoch brauche ich unbedingt immer noch eure Hilfe. Denn ich bekomme dieses Problem einfach nicht gelöst ;(

    Hier nochmal der aktuelle Code den ich nicht gefixt bekomme:


    Quellcode

    1. func nowWork(postdata: String, action: String, url: String) -> [AnyObject]{
    2. let getData = getJSONData(action, postparam: postdata, url: url)
    3. var DataArray:[AnyObject] = []
    4. for elem: AnyObject in JSONParseArray(getData) {
    5. var DBDataSet:[String] = []
    6. let id = elem["id"] as! String
    7. let typ = elem["typ"] as! String
    8. let re = elem["re"] as! String
    9. let cid = elem["cid"] as! String
    10. DBDataSet.append(id)
    11. DBDataSet.append(typ)
    12. DBDataSet.append(cid)
    13. DBDataSet.append(re)
    14. DataArray.append(DBDataSet)
    15. }
    16. return DataArray
    17. }
    18. if(action == 1){
    19. let workWithData = nowWork("isdx="+###+"&tezs="+###,action: "1",url: "http://XYZ.php")
    20. for elem in workWithData{
    21. let data_id: String = elem[0] as! String < hier gibt es den error
    22. let data_typ: String = elem[1] as! String < hier gibt es den error
    23. let data_cid: String = elem[2] as! String < hier gibt es den error
    24. let data_re: String = elem[3] as! String < hier gibt es den error
    25. self.datastructarray.append(datastruct(id: data_id, typ: data_typ, cid: data_cid, re:data_re))
    26. }
    27. }
    Alles anzeigen
    Kann mir jemand helfen? Vielen Dank! :thumbsup:
  • Tecalto schrieb:

    Wie ist den die Funktion "JSONParseArray" implementiert?
    Die Funktion sieht so aus:

    Quellcode

    1. func JSONParseArray(jsonString: String) -> [AnyObject] {
    2. if let data = jsonString.dataUsingEncoding(NSUTF8StringEncoding) {
    3. do {
    4. let array = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0)) as? [AnyObject]
    5. return array!
    6. } catch let error as NSError {
    7. print(error)
    8. }
    9. }
    10. return [AnyObject]()
    11. }
    Alles anzeigen
  • Ok ich habs gelöst. Das Problem lag an dieser Zeile:

    Quellcode

    1. for elem in workWithData{


    geändert in:

    Quellcode

    1. for elem in workWithData as! [NSArray]{
    und siehe da es geht wieder :D

    Darauf gekommen bin ich durch das Abfragen des Object-Types der Variable.

    Quellcode

    1. for element in workWithData{
    2. print( "TypeName = \(_stdlib_getDemangledTypeName(element[0]))")
    3. }
    4. // Ausgabe: TypeName = Swift.ImplicitlyUnwrappedOptional<AUAudioUnitBus>

    Danke euch für eure Tips :thumbsup:
  • Einen ähnliches Verhalten habe ich auch bei Objc.

    Hatte folgende Zeile

    Quellcode

    1. NSString *string = [stringDic valueForKey:@"name"];

    Die Zeile hat auf alten Geräten (iPhone 4, iOS 7) zum Absturz geführt.

    Auf meinem iPhone 6 mit iOS 8 damals nicht.

    Änderte ich die Zeile so:

    Quellcode

    1. NSSString *string = [NSString stringWithFormat:@"%@", [stringDic valueForKey:@"name"]];
    Lief es auf jedem Gerät.

    In dem Dictionary waren nur NSStrings.
    Every language has an optimization operator. In ObjC that operator is ‘//’.

    golbros.de
  • Was hat denn zum Absturz geführt?

    Ich halte KVC auf Dictionaries für so uralt und abgehangen, dass ich mir nur ganz, ganz schwer vorstellen kann, dass sich dort in Cocoa (mit Objective-C hat das nichts zu tun) ein Bug befindet.

    Für viel, viel wahrscheinlicher halte ich es, dass du irgendwo hättest auf nil prüfen müssen. Die zweite Zeile verhindert das nämlich.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Amin Negm-Awad ()