2014-06-08 3 views
5

Sto provando a chiamare CGRectDivide e non riesco a capire la sintassi in Swift. La guida linguistica non sembra essere di alcun aiuto.Come chiamare CGRectDivide in Swift?

Ecco il modello:

CGRectDivide(rect: CGRect, slice: CMutablePointer<CGRect>, remainder: CMutablePointer<CGRect>, amount: CGFloat, edge: CGRectEdge) 

Il mio codice:

var r = UIScreen.mainScreen().bounds 
var mySlice: CGRect 
var myRemainder: CGRect 
CGRectDivide(rect: CGRect, slice: mySlice<CGRect>, remainder: myRemainder<CGRect>, amount: 44.0, edge: CGRectEdge.MaxYEdge) 

Questo mi dà un errore: "Impossibile specializzare una definizione non generico"

stumped. Questo per Swift che è un linguaggio molto leggibile.

risposta

3

Prova questo:

CGRectDivide(r, &mySlice, &myRemainder, 44.0, CGRectEdge.MaxYEdge) 
+0

Wow. Questo mi sembrava troppo simile a C per me, ma ha funzionato. Grazie. – pizzafilms

18

Se si Comando-clic su un simbolo CGRect nel codice, sarete presi alla dichiarazione Swift di struct CGRect. Nella sua prima estensione si trova un certo numero di metodi utili, tra cui le seguenti:

Swift 2: 
func divide(atDistance: CGFloat, fromEdge: CGRectEdge) -> (slice: CGRect, remainder: CGRect) 

Swift 3: 
func divide(_ atDistance: CGFloat, fromEdge: CGRectEdge) -> (slice: CGRect, remainder: CGRect) 

che si poteva usare in questo modo:

import UIKit 

let rect = CGRect(x: 0, y: 0, width: 100, height: 100) 
let (slice, remainder) = rect.divide(10.0, fromEdge: .MinXEdge) // Swift 3: .minXEdge 
print("rect: \(rect)") // prints "rect: (0.0,0.0,100.0,100.0)" 
print("slice: \(slice)") // prints "slice: (0.0,0.0,10.0,100.0)" 
print("remainder: \(remainder)") // prints "remainder: (10.0,0.0,90.0,100.0)" 
+1

La firma del metodo è stata modificata nelle versioni recenti in: public func divide (atDistance: CGFloat, fromEdge: CGRectEdge) -> (slice: CGRect, resto: CGRect) – Lombas

+0

@Lombas Grazie, ho aggiornato la risposta per Swift 2 e 3. –

3

Proprio campione, come si può provare a farlo:

let rect = CGRectMake(0, 0, 100, 100) 
var sliceRect = CGRectZero 
var remainderRect = CGRectZero 
CGRectDivide (rect, &sliceRect, &remainderRect, 30.0, "CGRectEdge"); 

print(sliceRect) 
print(remainderRect) 

"CGRectEdge" dovrebbe essere sostituito da:

enter image description here

1

Si dovrebbe usare la nuova Swift divide su CGRect invece di CGRectDivide:

let frames = view.bounds.divide(44.0, fromEdge: .MinYEdge) 
let slice = frames.0 
let remainder = frames.1