所以這是一個類,讓你有一個雙擊和一個輕拍手勢功能。它在Swift 2.3中工作正常,但在轉換爲Swift 3之後,它拋出了一些錯誤。我無法理解/理解我的生活。我評論他們在哪裏發生。無法分配到type() - >()?
// UIShortTapGestureRecognizer.swift
//
//
import Foundation
import UIKit
func delayHelper(_ time:TimeInterval, task:@escaping()->()) -> DelayTask? {
func dispatch_later(_ block:@escaping()->()) {
DispatchQueue.main.asyncAfter(
deadline: DispatchTime.now() + Double(Int64(time * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC),
execute: block)
}
var closure:()->()? = task
var result: DelayTask?
let delayedClosure: DelayTask = {
cancel in
//Initializer for conditional binding must have Optional type, not '() ->()?'
if let internalClosure = closure {
if (cancel == false) {
DispatchQueue.main.async(execute: internalClosure)
}
}
// here it says Nil cannot be assigned to type '() ->()?'
closure = nil
result = nil
}
result = delayedClosure
dispatch_later {
if let delayedClosure = result {
delayedClosure(false)
}
}
return result;
}
func cancel(_ task:DelayTask?) {
task?(true)
}
}
這意味着返回參數是可選。試試(() - >())? – totiG
我有些懷疑這會在Swift 2.3中編譯,它也應該考慮將'() - >()?'作爲返回'Void?'的函數。 – Hamish