2017-03-10 23 views
0

我試圖轉移別人的代碼多達斯威夫特3.所有得很順利,除了一個行我一直無法弄清楚。它工作正常,在雨燕2.2的是,但是在斯威夫特3.將無法編譯它返回的錯誤:不能調用非功能型的價值「SessionManager」

Cannot call value of non-function type 'SessionManager'

import Alamofire 

struct AlamofireAPIManager { 
    static let sharedManager: SessionManager = { 
     let configuration = URLSessionConfiguration.default 
     configuration.timeoutIntervalForRequest = 360 // 120 seconds 
     configuration.timeoutIntervalForResource = 360 
     return SessionManager(configuration: configuration) 
    }() 
} 

. 
. 
. 

override init() { 
    let configuration = URLSessionConfiguration.default 
    configuration.timeoutIntervalForRequest = 360 
    configuration.timeoutIntervalForResource = 360 // seconds 

    self.alamofireManager = AlamofireAPIManager.sharedManager(configuration) 
} 

有問題的行是:

self.alamofireManager = AlamofireAPIManager.sharedManager(configuration) 

如果我改變它到:

self.alamofireManager = AlamofireAPIManager.init() 

它會編譯,但然後該應用程序無法正常工作。

你有什麼想法,什麼他想要做的,在這裏,什麼應該做將其遷移到斯威夫特3?謝謝。

**編輯:這裏是原代碼,任何遷移之前:

import Alamofire 

struct AlamofireAPIManager { 
    static let sharedManager: Manager = { 
     let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
     configuration.timeoutIntervalForRequest = 360 // 120 seconds 
     configuration.timeoutIntervalForResource = 360 
     return Manager(configuration: configuration) 
    }() 
} 

. 
. 
. 

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 
configuration.timeoutIntervalForRequest = 360 
configuration.timeoutIntervalForResource = 360 // seconds 

self.alamofireManager = Alamofire.Manager(configuration: configuration) 
+0

你爲什麼將參數傳遞給sharedManager變量? SessionManager不是一個函數,正如錯誤所述。 – mattd

+0

不太確定,@mattd。正如我所說,我正在處理別人的代碼。原來的命令實際上是'self.alamofireManager = Alamofire.Manager(配置:配置)'。在遷移過程中它發生了幾次變化。我假設它嘗試共享會話管理器。 – Lastmboy

+0

是的,這是一個單身變量。所以它不接受參數,因爲你將它們設置在變量聲明中。 基本上,你應該刪除你調用的參數,兩個版本是相同的。 – mattd

回答

0

這編譯:

import AlamoFire 

struct AlamofireAPIManager { 
    static let sharedManager: SessionManager = { 
     let configuration = URLSessionConfiguration.default 
     configuration.timeoutIntervalForRequest = 360 // 120 seconds 
     configuration.timeoutIntervalForResource = 360 
     return SessionManager(configuration: configuration) 
    }() 
} 

func i() { 
    let alamofireManager = AlamofireAPIManager.sharedManager 
}