2017-07-30 56 views
-2

我有2个文件ProductTableViewCotrollers.swiftProduct.swift无法使用类在迅速

Product.swift名为Product声明一个类,我试图初始化和ProductTableViewCotrollers.swift没有成功使用。

这里是我ProductTableViewCotrollers.swift

class ProductsTableViewController: UITableViewController { 
    let p1 = Product() 
    let p2 = Product() 
    let p3 = Product() 
    let p4 = Product() 
    p1.name = "" 
    //////...... 

这里Product.swift

import Foundation 
import UIKit 

class Product { 
    var name: String? 
    var image: UIImage? 
    var cellImage: UIImage? 
} 

博特文件是相同的目标Phones

,这里是错误称没有定义

我使用的Xcode 8.3.3 (8E3004b) 和OSX 10.12.6 (16G29)

+0

我发现,如果我把它里面的viewDidLoad它的工作原理,但我想明白为什么@ user1000,因为这是一些静态分配 – nikoss

回答

1

设置财产的视图控制器生命周期的方法之一

class TableViewController: UITableViewController { 

let p1 = Product() 
let p2 = Product() 
let p3 = Product() 
let p4 = Product() 


override func viewDidLoad() { 
    super.viewDidLoad() 

p1.name = "" 



} 
0

尝试一些功能,这里面的语句像

func printName() { 

    print(p1.name) 

} 
+0

当我把它放在viewDidLoad它的作品,但我不明白为什么 – nikoss

+1

你可以在类作用域声明属性。它不能将任何代码编写为类范围。代码需要进入函数内部。 – Paulw11

1

只能申报变量或在类中的方法之外创建对象。所以let p1 = Product()是一个方法外的有效语句。这是一个具有初始化的类的全局变量声明。要访问此类的任何对象,您需要访问方法内部。所以下面尝试在viewDidLoad -

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    p1.name = "" 
    p2.name = "" 


} 
1

你可以用一个封闭初始化属性:

let p1 = { let p = Product() 
    p.name = "" 
    return p 
}()