2017-08-25 50 views
-1

我有一个名为Challenges类,定义如下:我不能定义一个包含对象类型值的数组?

class Challenges { 

    var title : String? 
    var description : String? 
    var points : Int? 
    var status : String? 
    var img :String? 

    init (title : String ,description : String , point : Int , status : String , img : String){ 

     self.title = title 
     self.description = description 
     self.points = point 
     self.status = status 
     self.img = img 
    } 
} 

然后我想创建它的一个实例:

var test = Challenges(title: "indoor", description: "hard", point: 123 , status: "Done", img: "img.com") 

,然后我希望把该实例中的阵列:

var holdChallenges : [Challenges] = [test] 

然后我得到了以下错误: Cannot use instance member 'bounds' within property initializer; property initializers run before 'self' is available

,所以我把它改为:

lazy var holdChallenges : [Challenges] = [self.test] 

,然后我收到以下错误:

型NSObject的价值已经没有价值的构件测试

+0

*? –

+2

此外,代码中的任何地方都没有“实例成员”边界“。请展示一个真正独立的示例来展示问题。 –

+0

当初始者需要非可选值时,为什么您的属性是可选的?由于这些是将要使用的值,因此为参数提供可选类型似乎毫无意义。 – Abizern

回答

1

的ANWER是有前“自我”运行属性初始化可那么那么你做出了错误的声明

因为你正试图初始化一个属性(变量)与另一个在初始化过程中。此时变量尚不可用。

那么,*您定义`test`和`holdChallenges`变量,你可以做到这一点

var test = Challenges(title: "indoor", description: "hard", point: 123 , status: "Done", img: "img.com") 

    // one way 

    var holdChallen :[Challenges ] = [Challenges(title: "indoor", description: "hard", point: 123 , status: "Done", img: "img.com")] 

    // second way 

    var holdChallenges : [Challenges] { 

     return [test] 
    } 
1

您可以返回[test]通过computed property是这样的:

var holdChallenges: [Challenges] { 
    return test 
} 

或通过lazy属性:

lazy var lazyHoldChallenges: [Challenges] = { 
    return [self.test] 
}() 
相关问题