2015-11-19 34 views
3

Swift相对较新,并且与最简单的事情一起挣扎。我希望预先分配一个设置为默认值的结构数组。只要结构不嵌套在另一个类型中,这就可以工作。有任何想法吗?这里被简化例如:嵌套结构类型的Swift数组(count,repeatedValue)

struct PlainStruct 
{ 
    var yo:Float = 0.0 
} 

class WrapperClass 
{ 
    struct NestedStruct 
    { 
     var yo:Float = 0.0 
    } 
} 

// Works just fine 
var a = [PlainStruct](count:2, repeatedValue:PlainStruct()) 

// Error - Cannot call value of non-function type '[WrapperClass.NestedStruct.Type]' 
var b = [WrapperClass.NestedStruct](count:2, repeatedValue:WrapperClass.NestedStruct()) 

感谢

+0

它似乎是一个编译器的bug:http://stackoverflow.com/questions/25682113/why-cant-i-instantiate-an-empty-array-of-a-nested-class – giorashc

+0

嗨,是的好点,但在这种情况下,我确实需要一个Float,没有,我相信它默认为Double。谢谢 – greekgoddj

回答

4

如果你创建一个typealias它的工作原理。例如:

struct PlainStruct 
{ 
    var yo:Float = 0.0 
} 

class WrapperClass 
{ 
    struct NestedStruct 
    { 
     var yo:Float = 0.0 
    } 
} 

typealias Nested = WrapperClass.NestedStruct 

var b = [Nested](count:2, repeatedValue:WrapperClass.NestedStruct()) 

至于为什么我们必须做到这一点...我不喜欢说这没有证据,但我认为这是一个编译器缺陷,相信大家应该能够使用原来的版。

+0

不错,不知道类型别名。这样做会起作用,直到解决编译器中的错误。谢谢! – greekgoddj

+0

不客气。 – Moritz

+0

问题仍然出现在Swift 3.0.2中。 ''Array (重复:...,count:...)'''也可以解决这个问题。 – nstein