ios - Assigning array property is always going to crash EXC_BAD_ACCESS -
i cannot understand why following code every time crashes on xcode 6 gm using swift. me understand issue?
thank in advance.
optionstoselect.swift
import foundation struct optiontoselect { var value : var desc : string var available : bool } someclass.swift
import foundation class someclass { var items = array<optiontoselect>() } viewcontroller.swift
override func viewdidload() { super.viewdidload() var c = someclass() c.items = [ /// <------------- __ exc_bad_access here, why?! __ optiontoselect(value: 1, desc: "a", available: true), optiontoselect(value: 2, desc: "b", available: true) ] } edit 1 on twitter got answer it's related any, , indeed. why?
the compiler still has various problems any, short answer "bug in swift." has trouble if value protocol. suspect has trouble figuring out how make copy; that's guess.
but should avoid using any here. never should use any. in cases, want generic:
struct optiontoselect<t> { let value : t let desc : string let available : bool } (the way you're using it, let seems more appropriate var here; need change these values?)
this require entire array have same kinds of values:
var items = [optiontoselect<int>]() but that's correct anyway. if isn't; if need mix of values, should consider protocol values might conform to. won't solve problem (swift crash on protocol here too), design better any. if best can type "well, it's something," you're going lot of complicated (and dangerous) down-casting code. you'll fight every time turn around.
to use protocol here (or any) can either make optiontoselect class (which easiest answer), or hide problem in box:
struct optiontoselect { let value : anybox let desc : string let available : bool } final class anybox { let value: init (_ value: any) { self.value = value } } [ optiontoselect(value: anybox(1), desc: "a", available: true), optiontoselect(value: anybox(2), desc: "b", available: true) ] (the same technique needed protocol types.)
Comments
Post a Comment