2016-06-16 12 views
-3

Hier ist eine besondere Art von Unsinn, die mich neugierig gemacht hat. Ich dachte, ein Screenshot wäre der einfachste Weg, um zu zeigen, was passiert.Rückgabewert des Typs 'Bool' kann nicht in den Rückgabetyp 'Bool' konvertiert werden

Dieser Fehler scheint totaler Unsinn zu sein. Ich sehe die Unterscheidung "return expression" und "return type" in dem Fehler, aber ich weiß nicht, ob das eine sinnvolle oder nur schlechte Sprachwahl der Entwickler ist.

enter image description here

Kann mir jemand sagen, was hier vor sich geht?

EDIT:

Wie gewünscht, habe ich einen kleinen Testfall in einem isolierten Swift-Datei als solche:

func TestFunc(item: AnyObject) -> Bool { 
    if !(item[1] as! Bool){ 
     return (item[2] as! Array).count > 0 
    } 

    return false 
} 

, die die gleichen Fehler gab. ColGraff Vorschlag folgen, von einer Art auf das Array bereitstellt, änderte ich den Code:

func TestFunc(item: AnyObject) -> Bool { 
    if !(item[1] as! Bool){ 
     return (item[2] as! Array<AnyObject>).count > 0 
    } 

    return false 
} 

, die die Fehlermeldung entfernen hat aber keine der Antworten haben bisher die ursprüngliche Frage beantwortet, wie zu dem, was die Fehlermeldung heißt eigentlich.

+2

Sie können den Text des Codes besser als einen Screenshot posten. So können die Leute es kopieren und einfach testen. [So erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) – ColGraff

+1

Es gibt eine Reihe von Fehlern hier. Bitte posten Sie Ihren vollständigen Code im Textformat. –

+0

Ich habe den ursprünglichen Beitrag bearbeitet, um einen kopier- und mischbaren Code zu erstellen. Bei einer Frage nach der Art einer Fehlermeldung, nicht bei einer Anfrage nach einer Korrektur, wurde ein wenig nach unten geantwortet. –

Antwort

1

Ihr Problem ergibt sich aus dem Code

item[2] as! Array 

Sie müssen die Art des Elements im Array angeben. Ich gehe davon aus, es ist AnyObject so sollten Sie tun:

return (item[2] as! Array<AnyObject>).count > 0 

Allerdings gibt es viele Fehler in diesem Code und auch eine Menge von anti-Muster. Ein wichtiger ist, dass Sie den erzwungenen Unwrapping-Operator ! verwenden. Vermeiden Sie es überhaupt, wenn Sie können. Sie sollten alle Optional und die Handhabung testen, wenn sie aktiviert oder deaktiviert ist.

guard let item2 = item[2] as? [AnyObject] else { return false } 
return !item2.isEmpty 

Diese Frage war schwieriger zu beantworten, als es hätte sein sollen, weil Sie nicht den Code in einer Minimal, Complete, and Verifiable Weise veröffentlichen hat. Screenshots sind nicht sehr nützlich, da der Beantworter Ihren Code neu eingeben muss, was Zeit kostet und möglicherweise Fehler verursacht. Ganz zu schweigen davon, dass ein Großteil des Codes, der den Fehler umgibt, reproduziert werden muss, bevor ein Debugging stattfinden kann. Sie erhalten viel mehr nützliche Informationen von dieser Website, wenn Sie es einfacher machen, Ihre Fragen zu beantworten.

+0

Ich habe den ursprünglichen Beitrag bearbeitet, um einen kopier- und pastenfreundlichen Code bereitzustellen. Die Änderungen haben den Fehler behoben, aber Ihre Antwort hat die ursprüngliche Frage angesprochen, was der Fehler tatsächlich bedeutet. –

Verwandte Themen