2017-07-04 2 views
0

Je suis très nouveau nouveau à Swift donc je m'excuse d'avance si c'est une question "bête". Je travaille juste sur un script de terrain de jeu pour générer des objets aléatoires, dans ce cas, des armes. Lorsque j'exécute mon code, j'obtiens cette erreur: erreur: L'exécution a été interrompue, raison: EXC_BAD_INSTRUCTION (code = EXC_I386_INVOP, sous-code = 0x0). Ce que j'essayais de faire est de maintenir une instance d'une structure (qui est handle) dans ma classe normalBladeType dans la variable weaponHandle. J'ai essayé de faire des recherches sur ce sujet mais je n'ai pas encore trouvé de réponse. Toute suggestion sera appréciée. Pour tout ce que je sais, je vais peut-être aller à ce sujet tout faux.Swift - comment stocker une instance de struct dans une propriété de classe

Merci,

mon code:

//: Playground - noun: a place where people can play 

import Cocoa 



let handleWoods = ["White Ash", "Oak", "White Oak", "Elm", "Maple","Walnut", "Cherry", "Rosewood", "Ash", "Hickory", "Birch", "Hemlock", "Cedar", "Pine"] 
let handleGrips = ["Leather", "Buckskin", "Sharkskin", "Goat Skin", "Deerskin", "Elk Skin", "Rayskin", "Snakeskin", "Silk Cord", "Cotton Cord"] 
let gripQualities = ["Simple", "Interwoven", "Ornate", "Smooth", "Thin", "Thick", "Ruff", "Worn"] 

func returnRandomItem(_ list: [Any])-> Any { 
    return list[Int(UInt32(list.count))] 
} 




struct handle { 
    var name: String 
    var value, grip: Int 
    var weight: Double 
    var withGrip: Bool 

    init(withGrip: Bool) { 
     self.weight = 0.25 
     self.withGrip = withGrip 
     let handleNameWithWood = "\(returnRandomItem(handleWoods)) Handle" 
     if self.withGrip { 
      let randGrip = "\(returnRandomItem(gripQualities)) \(returnRandomItem(handleGrips)) Grip)" 
      self.name = "\(randGrip) (\(handleNameWithWood))" 
      self.grip = 75 
      self.value = 2 
     } else { 
      self.name = handleNameWithWood 
      self.grip = 50 
      self.value = 1 
     } 
    } 

    func description() { 
     print("Handle Description \(self.name)") 
     } 

} 


class weapon { 
    var TypeOfWeapon: String 
    var weaponHandle: handle 

    init(weaponType: String, doesHaveGrip: Bool) { 
     self.TypeOfWeapon = weaponType 
     self.weaponHandle = handle(withGrip: doesHaveGrip) 
    } 
} 

class normalBladeType: weapon { 
    init() { 
     super.init(weaponType: "normalBladeType", doesHaveGrip: false) 
    } 

    func description() { 
     print("TypeOfWeapon: \(self.TypeOfWeapon)") 
     print("TypeDescription: normal hilt (guard - handle - pommel) + straight blade") 
    } 
} 


var foo = normalBladeType() 
foo.description() 
+0

Modifiez votre question pour inclure le code source de 'returnRandomItem'. –

Répondre

0

Votre fonction returnRandomItem est faux. Vous devriez le changer à

func returnRandomItem(_ list: [Any])-> Any { 
    let index: UInt32 = arc4random_uniform(UInt32(list.count)) 
    return list[Int(index)] 
} 

Cela fonctionne bien pour moi avec ce code.

+0

Merci, j'avais le sentiment qu'il y avait peut-être un problème ailleurs. Je prenais une photo dans le noir avec la structure dans une classe (j'ai essayé de regarder la documentation, etc, passé une journée à chercher le mauvais problème, il se avère). – JHuggett

+0

Vous êtes les bienvenus. Merci d'accepter – adev