使用PromiseKit 2.0和Swift 1.2,我试图使用在Swift的Objective C中创建的PMKPromise.
目标C代码:
@interface FooTest : NSObject
+ (PMKPromise *)promise;
@end
Run Code Online (Sandbox Code Playgroud)
Swift代码(我尝试了很多变种,但没有一个变化.这个变化最接近http://promisekit.org/PromiseKit-2.0-Released/上给出的例子):
FooTest.promise().then { (obj: AnyObject?) in
self.obj = obj
}
Run Code Online (Sandbox Code Playgroud)
编译器错误:无法使用类型'((AnyObject?) - > _)'的参数列表调用'then'
这也不起作用:
FooTest.promise().then { (obj: AnyObject?) -> AnyPromise in
return AnyPromise()
}
Run Code Online (Sandbox Code Playgroud)
类似的错误:"无法使用类型'的参数列表调用'then'((AnyObject?) - > AnyPromise)'"
我想了解swift-4中的承诺.如何使用多个then语句并完成,捕获块.
在这里,我试图从承诺中获得价值.但是我收到了错误.有人可以帮我理解承诺吗?
这是我的代码.
import UIKit
import PromiseKit
struct User {
var firstname : String?
var lastname : String?
}
struct APIError {
var message : String?
}
class ViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let userPromise : Promise = self.getUserDetails()
userPromise.then { user -> Void in
//print(user.f)
}
}
func getUserDetails()->Promise<User> {
return Promise<User> { resolve in
let user = User(firstname: "Scot", lastname: "dem")
if ((user.firstname?.count) != nil) {
resolve.fulfill(user)
} else {
let error = APIError(message: …
Run Code Online (Sandbox Code Playgroud) 这是我在安装PromiseKit后尝试构建项目时看到的错误.
Cannot import module being compiled.
Run Code Online (Sandbox Code Playgroud)
这是我的PodFile包含的安装PromiseKit的内容.
pod 'PromiseKit', :git => 'https://github.com/mxcl/PromiseKit.git', :branch => 'swift-2.0-minimal-changes'
Run Code Online (Sandbox Code Playgroud)
我尝试在PodFile中使用以下语句,但它抛出了更多的编译错误,所以我尝试了上面的语句.
pod "PromiseKit", "~> 2.0"
Run Code Online (Sandbox Code Playgroud) 我怎么能在PromiseKit 3.0和Swift 2中链接承诺?我正在尝试以下代码:
let url = "https://httpbin/org/get";
let url2 = "https://httpbin/org/get";
firstly {
NSURLSession.GET(url)
}.then { (json: NSDictionary) in
NSURLSession.GET(url2) // Error in this line
}.then { (json: NSDictionary) in
print("End of second request");
}
Run Code Online (Sandbox Code Playgroud)
但我在第6行得到错误"无法将类型'URLDataPromise'的值转换为关闭结果类型'AnyPromise'".
这基本上是从PromiseKit网站检索的样本,它应该可以工作,不是吗?我究竟做错了什么?
我有一项服务,当我输入错误的登录凭据时该服务失败。但是,我的 Promise 错误处理程序没有被调用。
我似乎不明白我的代码有什么问题,因此error
永远不会到达回调。
func loadRepositories() -> Promise<[Repository]>{
return Promise { fullfill, reject in
manager.request(Method.GET, baseURL + "/api/1.0/user/repositories")
.authenticate(user: username, password: password)
.responseArray { (response: Response<[Repository], NSError>) in
switch response.result{
case .Success(let value):
fullfill(value)
case .Failure(let e):
// The breakpoint here is reached.
reject(e)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
firstly{
service!.loadRepositories()
}.then { repositories -> Void in
loginVC.dismissViewControllerAnimated(true, completion: nil)
self.onLoginSuccessful()
}.always{
// Always gets called
loginVC.isSigningIn = false
}.error { error in
// I never get …
Run Code Online (Sandbox Code Playgroud) 我正在处理一个奇怪的 API,在那里我收到了一个 ID 列表,我需要单独请求每个 ID 的数据。我不需要一个接一个地链接这些请求,我只想一次抓住它们,但我无法弄清楚如何以一种干净的方式做到这一点。
我已经制定了获取一个 ID 的方法,它会生成一个Promise<DataObject>
. 我如何将我的 ID 数组变成一组承诺,然后给我[DataObject]
func fetchDataObject(_ id: Int64) -> Promise<DataObject> {
return makeURL("\(id)")
.then {
URLSession.shared.dataTask(.promise, with: $0)
}.compactMap { (data, response) -> DataObject in
// ...
return try decoder.decode(DataObject.self, from: data)
}
}
// get the list of IDs and turn them into DataObjects
func fetchNew() -> Promise<[DataObject]> { // desired output
return makeURL("all_ids").then {
URLSession.shared.dataTask(.promise, with: $0)
}.compactMap { (data, response) -> [Int64] in
// ...
return …
Run Code Online (Sandbox Code Playgroud) 使用Swift
,我PromiseKit
第一次尝试将 Promise 合并到我的代码中,并且在语法上难以理解如何使其工作。
我的目标是将Firebase
数据请求流水线化,并在所有返回的数据满足附加数组后执行另一种方法。似乎promise
已解决并在使用数据设置数组之前运行最终方法。我相信我应该使用“when”,但不可否认的是理解文档有困难。
缩写,相关代码如下:
getPosts(ids).done {
runningFinalMethod(self.arr)
}
func getPosts(_ ids: [String]) -> Promise<Void> {
return Promise { seal in
for id in ids {
db.collection("data").whereField("id", isEqualTo: id).getDocuments(completion: { (dataForId, error) in
appendData(dataForId)
})
}
seal.fulfill(())
}
}
func appendData(_ dataForId: [data]) {
arr.append(contentsOf: dataForId)
}
Run Code Online (Sandbox Code Playgroud) 目前,当我将我的PromiseKit从Swift 2更新到Swift 4时遇到了问题。我的许多Promise都将这个问题从NSDictionary退还给Guarantee Void。我不明白为什么会出现这个问题。如果有人可以向我解释,将不胜感激!
func getPlayerGameLog(sportName: String) -> Promise<NSArray> {
let team = (self as? PlayerWithPositionAndGame)?.team
let position = (self as? PlayerWithPositionAndGame)?.position
if sportName == "mlb" {
return when(Data.mlbPlayerGameLogs[id].get(), Data.sportsTeams[sportName].get()).then { (result, teams) -> NSArray in
if result.count == 0 {
return []
} else {
// Omitted Code
return gameStats
}
}
} else if sportName == "nfl" {
return when(Data.nflPlayerGameLogs[id].get(), Data.sportsTeams[sportName].get()).then { (result, teams) -> NSArray in
if result.count == 0 {
return []
} else {
// …
Run Code Online (Sandbox Code Playgroud) promisekit ×8
swift ×7
ios ×4
swift4 ×2
firebase ×1
iphone ×1
objective-c ×1
promise ×1
swift2 ×1
xcode ×1