Search code examples
swiftnsarrayswift3xcode8loadnibnamed

Could not cast value of type 'UIView' to 'NSArray'


How do I get all the views in a Nib file? I'm trying to get all the views within a Nib with:

   let objects = Bundle.main.loadNibNamed("ViewName", owner: self, options: nil)?[0]  as! NSArray
   let mainView : UIView = objects[0] as! UIView

Though I'm getting this error:

Could not cast value of type 'UIView' (0x108080b40) to 'NSArray' (0x105173c58).

Thanks in advance for your help.


Solution

  • loadNibNamed returns array of type [Any]? and your are subscript it using [0], means you are accessing the first object of Array. So just remove [0].

    let objects = Bundle.main.loadNibNamed("ViewName", owner: self, options: nil)
    

    Second option you can directly initialized UIView object.

    if let mainView : UIView = Bundle.main.loadNibNamed("ViewName", owner: self, options: nil)?[0] as? UIView {...}
    

    Choose which ever solution will solved your error.