我从Apple那里浏览了iBook,找不到任何定义:
有人可以解释结构dispatch_after吗?
dispatch_after(<#when: dispatch_time_t#>, <#queue: dispatch_queue_t?#>, <#block: dispatch_block_t?#>)
Run Code Online (Sandbox Code Playgroud) 我在iBooks中阅读了Apple编程语言Swift,但无法弄清楚如何在Swift中创建一个http请求(类似于CURL).我是否需要导入Obj-C类或者我只需要导入默认库?或者是否无法基于本机swift代码发出HTTP请求?
我正在努力完全理解GCD中的并发和串行队列.我有一些问题,希望有人能够清楚地回答我.
我正在读取串行队列的创建和使用,以便一个接一个地执行任务.但是,如果出现以下情况:
dispatch_async(在我刚创建的串行队列上)三次来发送三个块A,B,C这三个块会被执行:
按顺序A,B,C,因为队列是串行的
要么
我正在阅读我可以dispatch_sync在并发队列上使用,以便一个接一个地执行块.在这种情况下,为什么串行队列甚至存在,因为我总是可以使用并发队列,我可以根据需要同步调度多个块?
谢谢你的任何好解释!
我正在尝试按照本教程使用Swift和连接到JSON api NSURLConnection.我可以看到它正在击中网址,但connectionDidFinishLoading似乎没有开火.
import UIKit
class Remote: NSObject {
var host = "http://localhost:3000"
var query = String()
var data: NSMutableData = NSMutableData()
func connect(query:NSString) {
self.query = query
var url = self.document()
var conn = NSURLConnection(request: url, delegate: self, startImmediately: true)
}
func endpoint() -> NSURL {
var query = self.host + self.query
return NSURL(string: query)
}
func document() -> NSURLRequest {
return NSURLRequest( URL: self.endpoint() )
}
func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) { …Run Code Online (Sandbox Code Playgroud) 我在尝试使用我的主项目之前尝试了一些pod我想确保它能够满足我的要求.最简单的方法是在游乐场尝试.
我试着pod init用不起作用的操场
[!]没有找到xcode项目,请注明一个
非常感谢帮助.
这与我之前提出的问题有关,但不同之处,我认为我会把它扔进一个新问题.我有一些代码在自定义队列上运行异步,然后在完成时在主线程上执行完成块.我想围绕这种方法编写单元测试.我的方法MyObject看起来像这样.
+ (void)doSomethingAsyncThenRunCompletionBlockOnMainQueue:(void (^)())completionBlock {
dispatch_queue_t customQueue = dispatch_queue_create("com.myObject.myCustomQueue", 0);
dispatch_async(customQueue, ^(void) {
dispatch_queue_t currentQueue = dispatch_get_current_queue();
dispatch_queue_t mainQueue = dispatch_get_main_queue();
if (currentQueue == mainQueue) {
NSLog(@"already on main thread");
completionBlock();
} else {
dispatch_async(mainQueue, ^(void) {
NSLog(@"NOT already on main thread");
completionBlock();
});
}
});
Run Code Online (Sandbox Code Playgroud)
}
我投入了主队列测试以获得额外的安全性,但它总是能够击中dispatch_async.我的单元测试如下所示.
- (void)testDoSomething {
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
void (^completionBlock)(void) = ^(void){
NSLog(@"Completion Block!");
dispatch_semaphore_signal(sema);
};
[MyObject doSomethingAsyncThenRunCompletionBlockOnMainQueue:completionBlock];
// Wait for async code to finish
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); …Run Code Online (Sandbox Code Playgroud) 我正在学习Apple的GCD,并在Swift 3中观看视频并行编程与GCD.
在这个视频的16:00,DispatchWorkItem描述了一个标志.wait,并且功能和图表都显示了我的想法myQueue.sync(execute:).
所以,我的问题是; 有什么区别:
myQueue.sync { sleep(1); print("sync") }
Run Code Online (Sandbox Code Playgroud)
和:
myQueue.async(flags: .wait) { sleep(1); print("wait") }
// NOTE: This syntax doesn't compile, I'm not sure where the `.wait` flag moved to.
// `.wait` Seems not to be in the DispatchWorkItemFlags enum.
Run Code Online (Sandbox Code Playgroud)
似乎这两种方法在等待命名队列时阻塞当前线程:
我对此的理解必须在某处,我错过了什么?
我正在尝试从服务器下载JSON文件,并按照以下教程进行操作(http://www.learnswiftonline.com/mini-tutorials/how-to-download-and-read-json/)
首先,我尝试了“检查响应”部分(我添加了一些部分以查看出了什么问题)
let requestURL: NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("Everyone is fine, file downloaded successfully.")
} else {
print("Failed")
}
task.resume()
Run Code Online (Sandbox Code Playgroud)
这应该打印“每个人都很好〜”或“失败”,但都不会出现...我试图查看statusCode,所以我放进去了print(statusCode),task但是什么也没打印。
这是我的操场截图:
+
这是我一直在寻找的答案,因为我正在处理OS X命令行应用程序(我将整个程序移到操场上看看会发生什么)。如果您与我相同,请检查
我正在尝试将字符串地理编码为快速操场中的纬度/经度.这是我的代码:
import CoreLocation
var geocoder = CLGeocoder()
geocoder.geocodeAddressString("San Francisco, CA", {(placemarks, error)->Void in
println("here")
})
Run Code Online (Sandbox Code Playgroud)
但是,here永远不会打印到控制台(控制台输出为空白).为什么?
我想知道如何使用NSTimerSwift游乐场内部.之前已经问过这个问题,但没有一个答案真正回答了这个问题.
这是我的Playground代码:
import Foundation
class MyClass {
func startTimer() {
NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: "onTimer:", userInfo: nil, repeats: true)
}
func onTimer(timer:NSTimer!) {
println("Timer here")
}
}
var anInstance = MyClass()
anInstance.startTimer()
Run Code Online (Sandbox Code Playgroud)
实例化NSTimer与scheduledTimerWithTimeInterval创建计时器,并在当前运行的循环时间表吧.
但这种方法onTimer从未被调用过.为什么?
我想用 Future 做一个异步工作。但是下面的.sink() 闭包永远不会被调用。看起来 Future 的实例在它被调用后就被释放了。
Future<Int, Never> { promise in
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
promise(.success(1))
}
}
.receive(on: DispatchQueue.main)
.sink(receiveCompletion: { completion in
print(completion)
}, receiveValue: {
print($0)
})
Run Code Online (Sandbox Code Playgroud)
所以我将.sink() 闭包替换为.subscribe(Subscribers.Sink()) ,如下所示。它工作正常。但问题是我不明白为什么它工作正常。:(对我来说看起来一样。这两个代码有什么区别?我什么时候可以使用.sink(),什么时候不能?
Future<Int, Never> { promise in
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
promise(.success(1))
}
}
.receive(on: DispatchQueue.main)
.subscribe(Subscribers.Sink(receiveCompletion: { completion in
print(completion)
}, receiveValue: {
print($0)
}))
Run Code Online (Sandbox Code Playgroud)
提前致谢。
嗨,我想在操场上执行这行代码,但得到任何响应输出.我的代码如下:
func testCallbackEmpty( callback: @escaping () -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
callback()
}
}
testCallbackEmpty(callback: { () -> Void in
print("Hey called here")
})
enum Result {
case OK, FAILED
}
func mainCallback(callback: @escaping (Result) -> Void) {
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
callback(Result.OK)
}
}
mainCallback(callback: { result in
print("Hurray \(result)")
})
Run Code Online (Sandbox Code Playgroud) swift ×9
ios ×7
objective-c ×2
swift3 ×2
callback ×1
clgeocoder ×1
cocoapods ×1
combine ×1
concurrency ×1
foundation ×1
geocoding ×1
iphone ×1
json ×1
nstimer ×1
nsurlrequest ×1
nsurlsession ×1
swiftui ×1
uikit ×1
xcode ×1