2017-07-04 38 views
0

我是非常 Swift新手,所以如果这是一个“哑巴”问题,我很抱歉。我只是在制作随机物品的游乐场脚本,在这里是武器。当我运行我的代码时,出现以下错误:错误:执行中断,原因:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)。我想要做的是在我的类normalBladeType中的变量weaponHandle中保存一个结构(这是句柄)的一个实例。我试过研究这个话题,但我还没有找到答案。任何建议都会很棒。就我所知,我可能会对这一切都说错了。Swift - 如何在类中存储结构实例

感谢,

我的代码:

//: 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

编辑您的问题以包含'returnRandomItem'的源代码。 –

回答

0

returnRandomItem功能是错误的。您应该将其更改为

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

它使用此代码正常工作。

+0

谢谢,我有一种感觉,其他地方可能存在问题。我在黑暗中使用了一个类的东西(我试着查看文档等,花了一天的时间寻找错误的结果)。 – JHuggett

+0

不客气。感谢接受 – adev

相关问题