Tengo este código de ObjC. Quiero convertirlo a Swift, sin embargo, estoy teniendo problemas para hacerlo…

ObjC código :

navgivet.h

typedef NS_ENUM(NSInteger, BB3Photo) {
kirkenType = 10 ,
festenType = 20 ,
praestType = 30
};
@property (nonatomic, assign) BB3Photo selectedPhotoType;

navgivet.m

- (IBAction)changeImage:(id)sender {
if ([sender isKindOfClass:[UIButton class]]) {
    UIButton *button = sender;
    _selectedPhotoType = button.tag;
}
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Vælg Billed"
                                                   delegate:self
                                          cancelButtonTitle:nil
                                     destructiveButtonTitle:nil
                                          otherButtonTitles:@"Vælg fra Biblioteket", @"Vælg Kamera", nil];
sheet.actionSheetStyle = UIActionSheetStyleDefault;
[sheet showInView:[self.view window]];

}

switch (_selectedPhotoType) {
    case kirkenType: {
}break;
        case festenType: {
}break;
    case praestType: {
}break;
    default: 
       break;

Aquí está mi código swift en este intento de

 enum BBPhoto1: Int {
    case kommunen = 10
    case sagsbehandler = 20
    case festen = 30
}
@IBAction func changeImage(sender: AnyObject){
    if sender .isKindOfClass(UIButton){
        let button: UIButton = sender as UIButton
        selectedPhoto = BBPhoto1.fromRaw(button.tag)
    }

    let actionSheet = UIActionSheet(title: "Billeder", delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil, otherButtonTitles: "Vælg fra Biblioteket", "Vælg Kamera")
    actionSheet.showInView(self.view)

}
var selectedPhoto: BBPhoto1?

switch (selectedPhoto) {
        case kommunen {

        }

    case sagsbehandler{

        }
    }

pero me da errores : «el Uso de sin resolver identificador kommunen» y el mismo messege pero con Sagsbehandler.

¿Cómo puedo hacer que funcione ?

Pero el punto es SABER qué estoy de programación, etc. SABES lo que yo quiero para separar y hacer funciones. hace easiere el uso de nombres y no inventar el plato otra vez. También me postet esta en el 2014 😉
Lo siento Kenny se olvidó de comprobar la fecha de publicación. Su completo derecho, los mejores deseos para usted, espero que usted todavía está persiguiendo el swift idioma 🙂

OriginalEl autor KennyVB | 2014-10-04

1 Comentario

  1. 12

    Hay 3 problemas en el código.

    La primera es que selectedPhoto se declara como opcional, por lo que debe quitarle el envoltorio antes de usar en una instrucción switch – por ejemplo mediante el uso opcional de la unión.

    El segundo problema es que la sintaxis está utilizando es incorrecta. En cada case usted tiene que especificar el nombre completo (incluyendo el tipo), seguida de dos puntos (:

    case BBPhoto1.kommunen:
        //statements

    pero dado que el tipo puede ser inferida por el tipo de variable utilizada en el interruptor, se puede omitir el tipo de enumeración, pero no es el punto:

    case .kommunen:
        //statements

    Último, en swift un switch instrucciones requieren que todos los casos son manejados de forma explícita (3 en su caso) o el uso de un default caso para cubrir todos los casos no explícitamente que se manejan en la switch.

    Una versión de trabajo de su código sería:

    enum BBPhoto1: Int {
        case kommunen = 10
        case sagsbehandler = 20
        case festen = 30
    }
    
    var selectedPhoto: BBPhoto1?
    
    if let selectedPhoto = selectedPhoto {
        switch (selectedPhoto) {
        case .kommunen:
            println(selectedPhoto.toRaw())
    
        case .sagsbehandler:
            println(selectedPhoto.toRaw())
    
        default:
            println("none")
        }
    }

    Tenga en cuenta que, a diferencia de otros idiomas, el código, en cada caso, no de forma automática fallthrough para el siguiente caso, por lo que el break declaración no es necesaria – el único caso de uso para es cuando un caso no tiene ninguna instrucción (un caso con ninguna afirmación es un error en swift), y en ese caso el break sólo actúa como un marcador de posición y su significado es ‘no hacer nada’.

    Lectura sugerida: Instrucciones Condicionales

    Hmm, no entiendo por qué tienen que estar en una instrucción if… pero agradezco la respuesta y lo va a aceptar
    Llamar fromRaw devuelve un valor opcional debido a que el valor bruto de pasar podría no ser válido. En ese caso, usted recibirá nil. Es por eso que usted tuvo que declarar selectedPhoto como un opcional. Para utilizar el valor en el switch usted tiene que desenvolver el valor opcional. Aquí, @Antonio ha utilizado el facultativo de la sintaxis de enlace if let. Esto se une la no-opcional valor a la variable si no es nil. Si se le pasa un valor incorrecto para fromRaw y su selectedValue es nula, entonces el bloque siguiente if let no serán tenidas en cuenta.
    Gracias @vacawama para explicar de un modo claro 🙂
    También considero que es más preferible para el tipo de if let _ = selectedPhoto { en este caso para aclarar la intención de comprobación para una opcional y se desenvuelva el opcional a través de selectedPhoto! en el siguiente alcance. Pero esta es solo mi gusto personal.
    Podemos ponerlo dentro de interruptor de la condición, para que no escriba si la declaración ?

    OriginalEl autor Antonio

Dejar respuesta

Please enter your comment!
Please enter your name here