小编Tho*_*cic的帖子

我无法在Swift中使用Alamofire返回值

我现在的代码似乎没有返回任何东西,我无法找出导致问题的原因.

func getQuests(category: NSString, count: Int) -> NSArray {
    var quests = NSArray()

    Alamofire.request(.GET, apiUrlString, parameters: ["category": category, "count": count])
        .responseJSON { (request, response, json, error) in
            dispatch_async(dispatch_get_main_queue(), {
                quests = json as NSArray
            })
    }

    println(quests)  #=> ()

    return quests
}
Run Code Online (Sandbox Code Playgroud)

有人知道如何解决我遇到的问题吗?

[更新]:这是状态.

请看第五行和第八行.我无法完成任务的任务.

var quests = NSArray()

getQuests("normal", count: 30, completionHandler: {
    quests in
        self.quests = quests
    })

println(self.quests)  #=> ()

func getQuests(category: NSString, count: Int, completionHandler: (NSArray -> Void)) {
    var quests = NSArray()

    Alamofire.request(.GET, apiUrlString, …
Run Code Online (Sandbox Code Playgroud)

swift alamofire

4
推荐指数
1
解决办法
5108
查看次数

为什么这个块在创建时不会捕获变量值

我在使用GCD的Objective-C中遇到以下问题我无法弄清楚:

我使用以下方法计算一些648个瓷砖的东西.首先处理瓦片的顺序由设置变量"pi"的一些算法给出.变量"loaded"在此上下文中是全局变量,从0开始并正确地上升到647.

不使用块时,一切都很完美.

while (loaded < [self.tiles count]) {
    long pi = /* tricky way to calculate the position index to set */;
    NSLog(@"loaded: %d", loaded);
    // Do this in a separate thread
    dispatch_async(loader, ^{
        NSLog(@"loaded ->: %d", loaded);
        [self.tiles[loaded] setPositionIndexTo:pi];
    });

    loaded++;
}
Run Code Online (Sandbox Code Playgroud)

问题:

我得到一个例外,因为该块试图访问self.tiles [648]!在Apple的块文档中,可以看出,在创建块时,块中的变量值被捕获,所以我不明白,这是怎么回事.我确实理解加载的变量实际上最终确实具有值648,这应该在不执行的情况下中止循环.其他一些奇怪的是,值0也从未在块中使用,但它从1开始.有时也可能看到块在有关加载值的循环之前,有时会错过值,或做两次.这是一些输出:

 loaded ->: 612
 loaded: 613
 loaded ->: 613
 loaded ->: 614
 loaded: 614
 loaded ->: 614
 loaded: 615
 loaded: 616
 loaded ->: 615
 loaded: 617
 loaded ->: 617
Run Code Online (Sandbox Code Playgroud)

为什么以及如何实现这一目标?

感谢任何澄清,正如我认为Apple的文档明确指出的那样,当创建块时,应该捕获"已加载"的值而不再对块进行更改.

objective-c objective-c-blocks dispatch-async

2
推荐指数
1
解决办法
957
查看次数

我可以将 Route-Model-Binding 的解析逻辑更改为始终小写字符串键吗?

我在 Laravel 5.7 项目中使用 UUID 密钥,它运行得非常好。

当通过路由从数据库请求一个项目时,键被查找并作为一个字符串进行比较。当请求发送大写的 uuid 字符串时,路由模型绑定将找不到模型,尽管 Laravel 的 UUID 字符串是小写的。

有没有办法确保在执行查找查询之前键是小写的?

文档解释说我可以像这样自定义解析逻辑:

Route::bind('user', function ($value) {
    return App\User::where('name', $value)->first() ?? abort(404);
});
Run Code Online (Sandbox Code Playgroud)

但是这是无用的,因为它仅适用于特定的通配符(此处为“用户”),但我需要将其应用于每个绑定,并且该类当然是动态的。

有没有办法自定义该行为,或者有人可以将我指向 Laravel 进行动态解析的代码吗?

我不想退回到仅从 url 中获取标识符,然后在每条路线中找到自己。我真的很想更改所有路由模型绑定的行为。

routes laravel eloquent

2
推荐指数
1
解决办法
583
查看次数