У меня есть метод с именем importStories()
, который вызывает метод getStatusesUserTimelineWithUserID
для импорта данных временной шкалы из Twitter с помощью сторонней библиотеки Swifter. Проблема в том, что метод возвращается до того, как любые значения будут установлены в twitterData. Любые советы приветствуются.Функция Swift не работает
func importStories() -> [String] {
let twitterAccount = Swifter(REDACTED)
var twitterData = [String]()
twitterAccount.getStatusesUserTimelineWithUserID("REDACTED", count: 0, sinceID: nil, maxID: nil, trimUser: true, contributorDetails: false, includeEntities: true, success: { (statuses) -> Void in
if statuses != nil {
for var i=0; i<statuses!.count; i++ {
twitterData.append(statuses![i]["text"].string!)
}
}
}) { (error) -> Void in
}
return twitterData
}
public func getStatusesUserTimelineWithUserID(userID: String, count: Int?, sinceID: Int?, maxID: Int?, trimUser: Bool?, contributorDetails: Bool?, includeEntities: Bool?, success: ((statuses: [JSONValue]?) -> Void)?, failure: FailureHandler?) {
var parameters: Dictionary<String, AnyObject> = ["user_id": userID]
self.getTimelineAtPath("statuses/user_timeline.json", parameters: [:], count: count, sinceID: sinceID, maxID: maxID, trimUser: trimUser, contributorDetails: contributorDetails, includeEntities: includeEntities, success: success, failure: failure)
}
Это происходит потому, что getStatusesUserTimelineWithUserID - это асинхронный метод, то есть вы его называете, но вы не знаете, когда вернется результат. Одним из способов преодоления этой проблемы является использование шаблона делегирования (http://en.wikipedia.org/wiki/Delegation_pattern#Objective-C_example). – CjCoax
@CjCoax Спасибо! Я попробую. – TBDO