Tag: closures

功能快捷:关于关闭

有人说,函数和闭包是同一事物,具有不同的语法。 其他人则说函数是一种特殊的闭包。 闭包是一流的对象,因此它们可以嵌套并传递 首先,让我们知道一个函数是什么: 功能: 您可以使用func关键字定义一个函数。 函数可以接受多个参数,不返回任何一个或多个参数( 使用元组 ,我们一次可以返回多个值)。 上面的函数将两个整数作为输入,并返回一个带有两个整数值的元组。 如果您没有使用元组的经验,请在此处查看我的其他文章。 功能类型 让我们考虑一个简单的函数,该函数需要一个int并返回一个int 。 func doSometingWithInt(someInt:Int)-> Int { return someInt * 2 } 每个函数都有其自己的函数类型,该函数类型由参数类型和函数本身的返回类型组成。 上述函数的函数类型为: (int)->(int) 如果函数接受两个参数并返回一个参数,则类型为: (int,int)->(int) 此函数类型可用作嵌套函数的返回类型或用作参数。 func personInTheHouse()->((String)-> String){ func doProcess(process:String)->(String){//嵌套函数 return“此人是\(process)。” } return doProcess //或return doProcess(process 🙂 } let person = personInTheHouse() print(person(“打板球”))//打印“ 此人正在打板球。 ” 定义一个闭包: 了解闭包语法非常容易。 您现在知道什么是function type 。 只需将函数类型放在一对花括号中,然后在返回类型后面添加一个in关键字。 […]

添加一个返回值到闭包

我不是很熟悉closures。 我正在使用此function从远程服务器下载JSON文件 requestJson(){ // Asynchronous Http call to your api url, using NSURLSession: NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: "http://api.site.com/json")!, completionHandler: { (data, response, error) -> Void in // Check if data was received successfully if error == nil && data != nil { do { // Convert NSData to Dictionary where keys are of type String, and values are […]

函数没有按顺序运行

在viewdidload我有下面的方法: var savedSummonerID : Int? savedSummonerID = LeagueMethodHelper.retrieveSummonerIDFromSummonerName(serverNameAbbreviation, summonerName : summonerName) print("haha \(self.savedSummonerID)") 我期望按顺序运行方法,但print statement实际上首先被调用。 retrieveSummonerIDFromSummonerName如下所述: static func retrieveSummonerIDFromSummonerName(serverName : String, summonerName : String) -> Int { var savedSummonerID = 0 Alamofire.request(.GET, "https://\(serverName).api.pvp.net/api/lol/\(serverName)/v1.4/summoner/by-name/\(summonerName)?api_key=(key)") .responseJSON { response in print(response.response?.statusCode) // URL response if let JSON = response.result.value { if let summonerJSONInfo = JSON[summonerName.lowercaseString] as? [String:AnyObject] { […]

它如何才能迅速closures它的类的引用属性运行?

我有以下2个控制器列出如下。 我正在使用委托来尝试创build一个progressWindow,它将运行代码并很好地打印它,但代码是任意的。 闭包由符合协议的类定义(在我的情况下是SyncViewController), 但是我想从SyncViewControllers codeToRun {}闭包中更改progressWindowViewController的UI。 我该怎么做呢? SyncViewController.swift import UIKit class SyncViewController: UIViewController, progressWindowDelegate { var codeToRun = { //(self as! ProgressWindowViewController).theTextView.text = "changed the text" print("code to run") } var codeToCancel = {print("code to cancel")} var titleToGive = "Starting Sync…" override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. […]

从swift中得到variables的值

所以我有一个closures调用任务这是一个post请求,我有一个全局variables称为值,我试图设置“值”的值是我从数据库中检索数据存储在一个名为“数组”。 不要担心tableview.reloadData部分,这已经完成了。 我只想知道如何从封闭中获得价值。 var values:NSArray = [] @IBOutlet weak var Open: UIBarButtonItem! override func viewDidLoad() { super.viewDidLoad() Open.target = self.revealViewController() Open.action = #selector(SWRevealViewController.revealToggle(_:)) self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) get() print ("values=\(values)") } func get(){ let request = NSMutableURLRequest(URL: NSURL(string: "http://www.percyteng.com/orbit/getAllpostsTest.php")!) request.HTTPMethod = "POST" let postString = "user=\("ios")" request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in […]

即使在完成处理程序中,Swift代码也是asynchronous执行的

我很快就有了新的东西,一直在研究如何自己回答这个问题,因为我想学习,但是我完全被难住了。 我有一个从服务器请求数据的函数,并且在接收到数据之后,会执行一个完成处理程序来parsing数据。 在前面提到的完成处理程序中,调用了另一个函数,它本身传递了一个完成处理程序。 由于某种原因,函数中的函数调用正在被跳过,并且在第一个完成处理程序完全执行之后被完成。 下面的代码可能会更有意义: func loadSites(forceDownload: Bool){ self.inspectionSites = MyData.getLocallyStoredInspectionSites() if self.inspectionSites.count < 1 || forceDownload { self.http.requestSites({(sitesAcquired, jsonObject) -> Void in guard sitesAcquired else{ SwiftOverlays.removeAllBlockingOverlays() MyAlertController.alert("Unable to acquire sites from server or locally") return } let result = jsonObject for (_,subJson):(String, JSON) in result!.dictionaryValue { let site = InspectionSite() site.name = subJson[self.currentIndex]["name"].string! site.city […]

在主线程上运行closures

我创build了一个类,比开发人员更容易实现select器视图。 在UIPickerView数据源方法中,我从闭包中返回值。 例: func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return pickerNumberOfRows!(component: component) } 我对所有的数据源方法使用相同的东西。 当我运行应用程序,它显示屏幕上的select器没有数据。 问题是我从闭包接收数据,而这些闭包在主线程上没有运行。 有没有办法在主线程上运行该闭包,并确保它返回一个适合数据源函数返回值types的值? (例如,从上面的例子来看,闭包将返回一个Int) 编辑: 我知道使用dispatch_async。 但是,在我的情况下,它不会帮助我。 假设我创build了一个在主线程上运行闭包的函数,并且需要返回值如下所示: func closureOnMainThread()->Int{ dispatch_async(dispatch_get_main_queue()) { // Run your code here return self.pickerNumberOfRows!(component: 0) } return 0 } 但是,在返callback度块内部的值之前,返回0的函数存在一个问题。 编辑2:弄清楚事情。 我的代码包含一个自定义类的select器和一个UIViewController实现它: class CustomPickerView: NSObject, UIPickerViewDelegate, UIPickerViewDataSource { var pickerNumberOfRows: ((component: Int)->Int)? //MARK: […]

如何访问Swift中的闭包variables?

我是新来的Swift,我试图从这个函数得到的结果。 我不知道如何访问闭包内部的variables,它是从闭包外部传递给sendAsynchronousRequest函数的。 我已经阅读了Apple Swift指南中有closures包的章节,但是我没有find答案,而且在StackOverflow上找不到帮助。 我不能把'json'variables的值赋给'dict'variables,并把它粘在闭包之外。 var dict: NSDictionary! NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response, data, error) in var jsonError: NSError? let json = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &jsonError) as? NSDictionary dict = json print(dict) // prints the data }) print(dict) // prints nil

SWIFT ALAssetsLibrary不枚举组

我试图收集所有用户的图像缩略图到一个数组,但是当我调用ALAssetsLibrary的enumerateAssetsUsingBlock方法似乎没有发生。 import UIKit import AssetsLibrary class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet var photoLibView: UICollectionView var assetLibrary : ALAssetsLibrary = ALAssetsLibrary() func showCustomLibrary() { self.assetLibrary = ALAssetsLibrary() var assetsArray : [ALAsset] = [] var imageArray : [CGImage] = [] var count = 0 var countOne = 0 let assetsType : ALAssetsGroupType = Int(ALAssetsGroupAll) var groupBlock […]

在Swift中了解崩溃报告(部分应用…)

我是Swift编程新手,最近我用Swift实现了我的应用程序的Spotlightsearch。 一切都运行良好,但是,我现在得到的崩溃报告很less,我不知道什么是“部分适用”,为什么它崩溃。因为我无法在本地模拟,我试图解决它通过使用崩溃日志。 以下是崩溃报告 Thread : Crashed: com.apple.root.default-qos 0 AppName 0x1076d4 partial apply for static spotLightSearchManager.(indexAllItem in _03019F3D5642F39F2DF678310DF7E384)() -> () (spotLightSearchManager.swift:77) 1 AppName 0x10761c partial apply for static spotLightSearchManager.(indexAllItem in _03019F3D5642F39F2DF678310DF7E384)() -> () (spotLightSearchManager.swift:73) 2 AppName 0x107730 partial apply for thunk (spotLightSearchManager.swift) 3 AppName 0x107808 partial apply for static spotLightSearchManager.(clearAllItem(spotLightSearchManager.Type) -> (OnCompletion : () -> ()!) […]