2016-07-12 37 views
42

Ora che CGRectMake, CGPointMake, CGSizeMake, ecc. È stato rimosso in Swift 3.0, c'è un modo per aggiornare automaticamente tutte le inizializzazioni come da CGRectMake(0,0,w,h) to CGRect(x:0,y:0,width:w,height:h). Il processo manuale è .. piuttosto un dolore.Aggiorna CGRectMake a CGRect in Swift 3 Automaticamente

Non so perché Apple non automatica convertire questo quando ho convertire il codice a Swift Current Sintassi ...

+3

Converti in corrente La sintassi Swift funziona per me e converte 'CGRectMake (0,0, w, h)' in 'CGRect (x: 0, y: 0, larghezza: w, altezza: h)'. Se non funziona nel tuo caso, dovresti presentare una segnalazione di bug. –

risposta

17

Apple fornisce effettivamente questa funzionalità. Tutto quello che dovete fare è andare a:

Modifica>Convert>Per Ultime Swift Sintassi ...

enter image description here

e seguire le istruzioni sullo schermo.

Questo risolverà i problemi di sintassi e non sarà necessario creare nuove funzioni per tutte le varie funzioni rimosse.

+1

sì! per alcuni motivi, quando converto per la prima volta, alcuni file non sono stati convertiti. Ma quando ho corso di nuovo, lo ha fatto! Immagino che debba essere eseguito più volte finché tutti i tuoi file non vengono convertiti .. – yonasstephen

+0

non lo fa per me, ho più di una volta e anche dopo aver apportato alcune modifiche. – nights

64

La soluzione più semplice è probabilmente solo per ridefinire le funzioni di Apple portarono via. Esempio:

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect { 
    return CGRect(x: x, y: y, width: width, height: height) 
} 

che mettere in modulo e tutte le chiamate al CGRectMake funzionerà di nuovo.

+0

hmm che bello! fammi vedere cosa pensano gli altri; altrimenti, accetterò i tuoi come risposte! – yonasstephen

+0

Stavo aspettando che PaintCode si aggiornasse a Swift 3. Con tutti i 'CGRectMake's presenti, questa era di gran lunga la soluzione migliore. –

+0

Perché c'è un CGRectMake in primo luogo se puoi iniziare con CGRect allo stesso modo, non capisco –

28

Risposta breve: non farlo. Non lasciare che Apple ti guidi. I odioCGRect(x:y:width:height:). Ho presentato un bug su di esso. Penso che l'inizializzatore dovrebbe essere CGRect(_:_:_:_:), proprio come CGRectMake. Ho definito un'estensione su CGRect che la fornisce e l'ho interrotta in ogni singolo progetto nell'istante in cui inizio.

extension CGRect { 
    init(_ x:CGFloat, _ y:CGFloat, _ w:CGFloat, _ h:CGFloat) { 
     self.init(x:x, y:y, width:w, height:h) 
    } 
} 

In questo modo, tutto quello che devo fare è cambiare "CGRectMake" a "CGRect" in tutto il mondo, e ho finito.

+1

Grazie per questa ottima risposta utile ... Hai risparmiato tempo. –

+0

dove posso aggiungere questa estensione? piuttosto, come lo uso? grazie – nights

+0

@nights, al di fuori di ogni classe –