2015-12-12 12 views
5

C'è un modo (tramite un flag del compilatore o uno script) per rilevare gli unwraps forzati attraverso un progetto Swift?C'è un modo per rilevare lo srotolamento forzato attraverso un progetto Swift?

sto pensando a cose come queste:

let b = a as! B 
let c = a! 
a!.method() 

Senza innescare falsi positivi per var a: A! per esempio.

+0

È possibile regexare la ricerca "[^ \ 1]! [\ S \ p {P}]" per trovare tali istanze, inclusi gli optionals implicitamente non utilizzati (usarli è solitamente pessimo come lo scostamento forzato) escludendo il prefisso Operatore '!' per Bool e simili. Ho postato questo [qui] (https://www.reddit.com/r/swift/comments/3a3k65/quick_tip_for_every_swift_programmer/) prima, fammi sapere se questo risponde alla tua domanda e lo posterò come risposta – Kametrixom

+0

Usando la forza l'operatore di scartare, l'operatore di cast di forza ('as!'), o l'istruzione di errore ignore ('try!') non è una cosa incondizionatamente, universalmente negativa. Allo stesso modo uso del tipo 'ImplicitlyUnwrappedOptional ' - tutti questi sono costrutti che possono essere usati tranquillamente, con attenta considerazione, o usati senza pensieri in modi che possono introdurre bug. Concederei che i primi tre sono più probabilmente un segno di codifica imprudente rispetto all'uso del tipo IUO, anche se, soprattutto considerando che gli IUO sono necessari (e raccomandati) per casi d'uso come i punti vendita IB. – rickster

risposta

1

Come indicato nei commenti, una ricerca regolare può essere elaborata per catturare la maggior parte degli usi del suffisso !. (E se stai attento, dovresti essere in grado di ignorare la maggior parte degli usi di colon-typename-bang in modo da non ottenere rumore dalle dichiarazioni di tipo IUO.)

Questo è quanto di meglio si possa ottenere, tuttavia, ed è incompleto - ad esempio, ogni volta che chiami un'API che restituisce un tipo IUO e accedete ai suoi risultati senza controllare l'opzione, potresti eseguire uno scostamento forzato senza esplicitamente alcun botto nel codice.

Qualsiasi strumento che tenti di avvertire coerentemente gli unwraps non controllati dovrebbe avere una conoscenza approfondita delle regole di inferenza del tipo di sistema, della grammatica e del tipo di Swift. E davvero l'unico posto in cui puoi avere una tale conoscenza (e averlo correttamente) è all'interno del compilatore. Quindi probabilmente stai meglio con lo filing a feature request to Apple o con lo open source project.

Problemi correlati