retorno funciones for entrada ejemplo datos con swift

for - funciones en swift 4



Cómo pasar varios valores de enumeración como un parámetro de función (7)

Edición: En Swift 3.0 :

let options: NSStringDrawingOptions = [.usesLineFragmentOrigin, .usesFontLeading]

Edición: Esta es la forma en que usaría las opciones enumeradas en Swift 2.0 :

let options: NSStringDrawingOptions = [.UsesLineFragmentOrigin, .UsesFontLeading]

Edición: el problema se resolvió en iOS 8.3 SDK Beta 1 (12F5027d) :

NSStringDrawingOptions modificadas [estructura]

  • Desde: enum NSStringDrawingOptions : Int
  • Para: struct NSStringDrawingOptions : RawOptionSetType

Ahora puedes escribir:

let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading

Después de algunas investigaciones y el comentario de @Anton Tcholakov:

  1. Si está apuntando a OS X 10.10, esta es una forma simple de hacerlo:

    let size = CGSize(width: 280, height: Int.max) let options : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading let boundingRect = string.bridgeToObjectiveC().boundingRectWithSize(size, options: options, attributes: attributes, context: nil)

  2. Sin embargo, en iOS 8 SDK (en la semilla actual), hay un error, donde NSStringDrawingOptions es portado a Swift como enum : Int , en lugar de struct : RawOptionSet . Debería enviar un informe de error a Apple describiendo este grave problema.

Cómo haría lo siguiente: pasar dos opciones de NSStringDrawing como un parámetro de función en swift:

CGRect boundingRect = [string boundingRectWithSize:CGSizeMake(280.0, NSIntegerMax) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:options context:nil];


En Swift 2.1 podemos usar,

calculatedRect = (text as NSString).boundingRectWithSize(bounds.size, options: NSStringDrawingOptions([.UsesLineFragmentOrigin, .UsesFontLeading]), attributes: [NSFontAttributeName : font], context: nil)

para pasar varios valores de enumeración para un parámetro.


Otra solución, utilice unsafeBitCast .

Como abajo:

let options = unsafeBitCast(NSStringDrawingOptions.UsesLineFragmentOrigin.rawValue | NSStringDrawingOptions.UsesFontLeading.rawValue, NSStringDrawingOptions.self)


Parece que no puedo comentar la publicación de akashivskyy (que no tiene más de 50 de reputación), pero esto parece funcionar en mi final:

import Cocoa let drawingOpts : NSStringDrawingOptions = .UsesLineFragmentOrigin | .UsesFontLeading let boundingRect = "test".bridgeToObjectiveC().boundingRectWithSize(CGSize(width: 280, height: Int.max), options: drawingOpts, attributes: nil)

Además, si hago Cmd + clic NSStringDrawingOptions, lo veo como heredado de RawOptionSet.


Swift es compatible con el operador OR bitwise de C, pero los valores de la enumeración están ahora en un ámbito específico en lugar de ser simplemente símbolos globales:

let boundingRect = "fpp".boundingRectWithSize(CGSizeMake(280.0, CGFloat.max), options:NSStringDrawingOptions.UsesLineFragmentOrigin | NSStringDrawingOptions.UsesFontLeading, attributes:nil, context:nil)


en Swift 2.0 que será algo así como

theStringDrawingOptions = [NSStringDrawingOptions.UsesLineFragmentOrigin, NSStringDrawingOptions.UsesFontLeading]

ver conferencia wwdc 2015 -> 106_hd_whats_new_in_swift en 6 min


Respuesta actualizada para Xcode 6.3:

en Xcode 6.3 Beta (Swift 1.2) esto finalmente se solucionó, puedes hacerlo ahora así:

let boundingRect = "string".boundingRectWithSize(size, options: .UsesLineFragmentOrigin | .UsesFontLeading, attributes:nil, context:nil)

Para la versión antigua:

Parece un error en la versión beta actual, por ahora escribo el método Objective-C y lo uso desde Swift:

+ (NSStringDrawingOptions)combine:(NSStringDrawingOptions)option1 with:(NSStringDrawingOptions)option2 { return option1 | option2; }

y llame al formulario Swift:

let boundingRect = "string".boundingRectWithSize(size, options: StringDrawingOptions.combine(.UsesLineFragmentOrigin, with: .UsesFontLeading), attributes:nil, context:nil)