2017-07-30 61 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 
}()