ios - 在 uiwebview 中进行身份验证后调用 func

标签 ios swift authentication uiwebview cas

在我当前的项目中,我有 CAS 身份验证。我是在模态 uiwebview 中制作的。我的功能如下:

func models(callback: ([ModelType])->()) {
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true

    MLMPProvider.request(MLMP.Models, completion: {
        (data, status, response, error) -> () in
        func checkResponse(response:NSURLResponse){
            if toString(response.URL!).rangeOfString("login") != nil{

                NSNotificationCenter.defaultCenter().postNotificationName("LOGIN", object: response.URL!)
            }

        }

        checkResponse(response!)

        var result: [ModelType] = []
        if let data = data, let models = JSON(data: data, options: NSJSONReadingOptions.allZeros, error: nil).array {
            for model in models {
                if let modelId = model["uuid"].string {
                    result += [.Custom(modelId)]
                }
            }
        }

        callback(result)
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false

    })
}

我的问题是:在验证后通过回调调用模型的最佳方法是什么?也许我可以用选择器施展一些魔法?

最佳答案

我解决了我的问题 我将变量添加到我的网络层

var closure:Any!
var methodName:String!

并在我从服务器获取 token 时添加通知回调

@objc private func authTokenGetted(notification: NSNotification){
       recallMethodWith(methodName, andcallback: closure)
}
func recallMethodWith(name:String, andcallback: Any){
    switch name{
    case MethodsName.models:
        models(andcallback as! ([ModelType])->())
    case MethodsName.model:
        println("modelcall")
    default:
            println(name)

    }
}

init(){
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "authTokenGetted:", name: "AuthDone", object: nil)
}

我的模型函数看起来像:

func checkResponse(response:NSURLResponse) -> Bool{
    if toString(response.URL!).rangeOfString("login") != nil{
        NSNotificationCenter.defaultCenter().postNotificationName("LOGIN", object: response.URL!)
        return false
    }
    return true
}
func models(callback: ([ModelType])->()) {
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    self.methodName = __FUNCTION__
    self.closure = callback

    MLMPProvider.request(MLMP.Models, completion: {
        (data, status, response, error) -> () in

        if self.checkResponse(response!){
            var result: [ModelType] = []
            if let data = data, let models = JSON(data: data, options: NSJSONReadingOptions.allZeros, error: nil).array {
                for model in models {
                    if let modelId = model["uuid"].string {
                        result += [.Custom(modelId)]
                    }
                }
            }

            callback(result)
            UIApplication.sharedApplication().networkActivityIndicatorVisible = false
        }


    })
}

关于ios - 在 uiwebview 中进行身份验证后调用 func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32498128/

相关文章:

ios - 确定受 Touch ID 保护的钥匙串(keychain)项是否存在?

android - Android 和 iOS 崩溃报告的分类和分组

html - Objective-c:如何在没有 UIWebView 的情况下在 iOS 中将 html <img> 标签显示为图像

ios - Swift 慢速 collectionView

android - 如何在 Android 和 iOS 设备上打开 Spotify 链接?

iOS 10 时区格式问题,日期创建为 timeIntervalSince1970

swift - 为什么 Swift 的大于或小于运算符不能比较可选项,而等于运算符可以?

c# - Grpc.授权 : Could not load type 'Grpc.Core.CallCredentials' from assembly 'Grpc.Core.Api'

git - NPM install git repo 失败,因为它使用我的 mac 用户名而不是 'git'

azure - 使用用户分配的托管标识连接到 Azure Databricks