标签: completionhandler

在函数外部使用Alamofire请求的值

我似乎无法弄清楚这一点:我试图使用Alamofire请求从我的服务器(在JSON中)获取错误,但我无法获得该函数之外的值.

这是我的功能的实现:

    func alamoRequest(username : String, email: String, password: String, facebook: String, completionHandler : (String?) -> Void) {

    var jsonValue : JSON?
    let URL = "http://someurl.com/login.php"
    let requestParameters = ["username" : username, "email" : email, "password" : password, "facebook" : facebook, "date": NSNull()];
    var jsonString : String = String()

    Alamofire.request(.GET, URL, parameters: requestParameters).validate().responseJSON {
        response in
        switch response.result {
        case .Success:
            if let value = response.result.value {
                jsonValue = JSON(value)
                jsonString = jsonValue!["error"].stringValue
                print("Value in implementation is: \(jsonString)")

            }
        case …
Run Code Online (Sandbox Code Playgroud)

asynchronous ios completionhandler swift alamofire

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

如何检查HealthKit功能何时完成(Swift)

好吧,标题真的说明了一切,我无法在任何适合我的地方找到答案,所以我转向StackOverFlow.我正在尝试获取用户步数并将该值分配给UILabel.所以这里是我的一些代码(请注意,此函数包含在另一个类中,因此标签不在此函数的范围内):

func readTodayHealthData() -> Int {
        var stepCount: Int = 0
        func getStepsHealthData() {
        let stepsUnit = HKUnit.countUnit()
        let sumOption = HKStatisticsOptions.CumulativeSum
        let stepsHealthDataQuery = HKStatisticsQuery(quantityType: stepsHealth, quantitySamplePredicate: predicate, options: sumOption) {
            query, results, error in
            if let sumQuantity = results?.sumQuantity() {
                dispatch_async(dispatch_get_main_queue(), {
                    stepCount = sumQuantity.doubleValueForUnit(stepsUnit) * 2
                })
            }
        }
        healthKitStore?.executeQuery(stepsHealthDataQuery)
    }
  return stepCount
}
//Set UILabel Value
//**This code is in my View Controller which is in a separate class as a result this label …
Run Code Online (Sandbox Code Playgroud)

function ios completionhandler swift healthkit

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

如何检查电子邮件地址是否已使用Firebase

处理某些FirAuth事情,但由于某种原因,我无法弄清楚如何检查用户是否已经提出了电子邮件地址.我曾尝试过.fetchProvidersForEmail一段时间之前在其他问题中提出的建议,但无论出于何种原因,它都无法正常工作.此外,对于完成处理程序,我是非常环保的,所以任何建设性的批评都会受到欢迎.所以,就目前而言,我的代码中与此相关的部分是:

import UIKit
import Firebase
class LoginViewController: UIViewController {
var reply : Bool = true
@IBOutlet weak var emailTxt: UITextField!

@IBAction func nextScreen(sender: UIButton) {
print(emailCheck(emailTxt.text!))
}

 func emailCheck(input : String)->Bool{
    let pullEmails = FIRAuth.auth()!.fetchProvidersForEmail(input, completion:{
        result,error in
        var decision : Bool = true
        if error == "nil" {
            print(error)
            self.reply = true
        }else{
            print(error)
            self.reply = false
        }
    })
    return reply
}
}
Run Code Online (Sandbox Code Playgroud)

所以这就是回复总是打印true,可能是因为我明确地将它定义在顶部.无论哪种方式,它几乎就像完成处理程序没有等待实际完成它之前returns的值.我试图弄清楚如何使用它们,AsyncTasks但是我想知道我在这里是否有一个简单的错误可以解决这个问题.谢谢大家!

completionhandler swift firebase-authentication

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

未调用dismissViewController完成处理程序

尝试使用链接中第一个答案中的代码(由 Kampai 提供): How to use UIAlertController to replace UIActionSheet?

但是,在我的代码中甚至没有调用完成处理程序。

按下两个按钮后可以解除警报操作表,但完成处理程序内部没有任何工作。知道可能是什么问题吗?我是使用完成处理程序的新手,并试图在网上找到答案,但很少有人遇到与我相同的问题。

- (IBAction)takePhotoButtonPressed:(UIButton *)sender {
pressedButtonTagNumber = sender.tag;

UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];

[actionSheet addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {

    // Cancel button tappped
    [self dismissViewControllerAnimated:YES completion:^{
    }];
}]];

[actionSheet addAction:[UIAlertAction actionWithTitle:@"Take a Photo" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
    NSLog(@"!");
    // Take a Photo button tapped
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"0"); // NOT CALLED
        // Initialize UIImagePickerController
        UIImagePickerController *takePhotoImagePickerController = [[UIImagePickerController alloc] init];            takePhotoImagePickerController.delegate = self;
        takePhotoImagePickerController.allowsEditing = YES; …
Run Code Online (Sandbox Code Playgroud)

objective-c uiviewcontroller ios completionhandler ios-camera

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

目标 c 完成处理程序

我有带有 getContentInBackgroundWithMemberId 和 postRequest 函数的 RequestManager 类。我想从我的视图控制器调用它们并使用完成处理程序获取结果。如何编辑我的函数?

请求管理器

#import <Foundation/Foundation.h>

@interface RequestManager : NSObject

-(void)getContentInBackgroundWithMemberId:(int)memberId;

@end
Run Code Online (Sandbox Code Playgroud)

请求管理器

#import "RequestManager.h"

@implementation RequestManager


-(void)postRequestWithParams:(NSDictionary*)params
{
NSString *parameters = @"encrypt=93mrLIMApU1lNM619WzZje4S9EeI4L2L";
for(id key in params)
{
   NSString *obj = [NSString stringWithFormat:@"&%@=%@",key,[params objectForKey:key]];
   [parameters stringByAppendingString:obj];
}

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://someserver"]];

NSData *postBody = [parameters dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:postBody];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
    if(!connectionError)
    {
        NSDictionary …
Run Code Online (Sandbox Code Playgroud)

objective-c completionhandler

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

swift - 如何从系统函数的完成处理程序闭包内返回?

我知道这不行,因为它completion handler是在一个background Thread但是

我应该在哪里派遣主队列或我还需要做什么?

这是代码:

static func isNotificationNotDetermined() -> Bool{

    var isNotDetermined = false

    UNUserNotificationCenter.current().getNotificationSettings { (notificationSettings) in
        switch notificationSettings.authorizationStatus {
        case .notDetermined:
            isNotDetermined = true

        case .authorized:
            isNotDetermined = false

        case .denied:
            isNotDetermined = false

        }
    }

    return isNotDetermined
}
Run Code Online (Sandbox Code Playgroud)

completionhandler swift

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

具有多个参数的 Kotlin 补全

想象一个具有多参数完成的方法:

fun foo(completion : (p1 : Int, p2 : Int) -> Unit){
    completion(1, 2)
}
Run Code Online (Sandbox Code Playgroud)

通话时如何访问p1和p2 foo

android kotlin completionhandler

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

Swift Firebase 检查用户是否存在

我究竟做错了什么?我有一个像这张图片中显示的那样的数据库结构。 我的数据结构
在 appleDelegate.swift 中,我只想检查“用户”节点下是否确实存在某个用户令牌。也就是说,如果“用户”具有子 currentUserID(字符串标记)。我了解observeSingleEvent 是异步执行的。我在swift 中收到此错误:“应用程序窗口应在应用程序启动结束时有一个根视图控制器”。在“func application(_ application:UIApplication”)中,我有这个代码。我在下面还有我的完成处理程序函数。

if let user = Auth.auth().currentUser{
        let currentUserID = user.uid
        ifUserIsMember(userId:currentUserID){(exist)->() in
            if exist == true{
                print("user is member")
                self.window?.rootViewController = CustomTabBarController()
            } else {
                self.window?.rootViewController = UINavigationController(rootViewController: LoginController())
            }
        }

        return true
    } else {
        self.window?.rootViewController = UINavigationController(rootViewController: LoginController())
        return true
    }
}

func ifUserIsMember(userId:String,completionHandler:@escaping((_ exists : Bool)->Void)){
    print("ifUserIsMember")
    let ref = Database.database().reference()
    ref.child("users").observeSingleEvent(of: .value, with: { (snapshot) in
        if snapshot.hasChild(userId) {
            print("user exists")
            completionHandler(true)
        } else {
            print("user doesn't exist") …
Run Code Online (Sandbox Code Playgroud)

firebase completionhandler swift firebase-realtime-database

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

从不调用函数的完成处理程序会产生什么影响?

如果你从不调用完成处理程序会发生什么?有没有什么副作用?我假设可能存在内存泄漏,但我找不到任何文档。

func completeMe(completionHandler: @escaping (String?) -> Void) {
   return
}
Run Code Online (Sandbox Code Playgroud)

completionhandler swift

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

Swift - 异步/等待不停止让任务完成

我正在编写一个简单的程序,旨在与服务器通信,获取一些信息并显示它。但是,我遇到了异步代码的问题,主要是代码没有停止以允许服务器在继续之前做出响应。

我知道我一定做错了什么,但不知道是什么,非常感谢任何帮助。

override func viewDidLoad() {
    super.viewDidLoad()
    Task{
        let accessToken = await getToken()
    }
    print("Done")
}

private func getToken() async -> String{
    let url = URL(string: "https://api.petfinder.com/v2/oauth2/token")
    let payload = "grant_type=client_credentials&client_id=GUQj1MdQN3QunoxXz4vdd0DHPlcJC6yuqCLCEXavriJ4W6wTYV&client_secret=7whgSG3ZX6m9Cwfr2vEakOH90fSn3g0isIlae0CC".data(using: .utf8)
    var request = URLRequest(url: url!)
    request.httpMethod = "POST"
    request.httpBody = payload

    do{
        let (data,_) = try await URLSession.shared.data(for: request)
        let APItoken: token = try! JSONDecoder().decode(token.self, from: data)
        return APItoken.access_token
    }
    catch{
        return ""
    }
}
Run Code Online (Sandbox Code Playgroud)

asynchronous async-await completionhandler swift

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