Nil 不能赋值给 ()->() 类型?

2023-11-29

这是一个类中的函数,可让您进行双击和单击手势。它在 Swift 2.3 中工作正常,但转换到 Swift 3 后会抛出一些错误。我一生都无法理解/弄清楚。我评论了它们发生的地方。

//  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)
    }
}

尝试使用:var closure: (()->())? = task

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nil 不能赋值给 ()->() 类型? 的相关文章

随机推荐