这是一个类中的函数,允许你双击和单击手势。它在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)
}
}
以下是我如何克服这个问题的方法。在这里,clang不知道它的类型。我给出了一个typealias和可选声明,
typealias appDelegateBlock = ()->()
在您的类中,只需将其声明为可选,
var block: appDelegateBlock?
block = task
从另一个话题:
func someFunction(someParameter: someType, completionClosure: @escaping @autoclosure () -> ()? = nil)
使用@自动闭包允许我将nil分配给可选闭包。
someFunction(x, { ... })
或
someFunction(x)
尝试:var闭包:()-
这是我的水果 现在我正在导入另一个typescript文件中的fruit.ts。这是我的 当我做的时候 我得到一个错误: 类型“string”不能分配给类型“orange”“apple”“banana”“ 如何将字符串赋给自定义类型fruit的变量?
在我的班级中,我有一个属性: 并希望将其设置为: 设置此设置时,我会得到错误
我有一个打字错误: 类型“(element:Conversation)=>void”的参数不可赋给类型“(value:Conversations,index:number,obj:Conversation[])=>boolean”的参数。不能将“void”类型赋给“boolean”类型。 这个错误是什么意思?提前谢谢你。
我没有找到我的问题的答案,所以我在这里问它
问题内容: 在上面的代码示例中,我尝试通过使用参数表单击按钮来调用方法( fetchData )。 错误是 类型’void’不能分配给类型’((event:MouseEvent)= > void)| 未定义”。 问题答案: 在您的代码中,您正在 调用 该函数。函数返回。不能期望哪个功能。 创建一个调用fetchData的新函数,例如。 更多 这是TypeScript防止的非常常见的错误
我刚刚更新到Dart2和Flatter sdk:' 无法将参数类型“Object”指定给参数类型“ImageProvider”。), 我只是从弗利特开始,不知道该去哪里找别的。