如何在类似swift的Java接口中使用闭包
我有一个java硬编码的代码片段,如下所示。如何使用协议或其他Swift内容在Swift 3上重写此代码如何在类似swift的Java接口中使用闭包,java,swift,interface,closures,Java,Swift,Interface,Closures,我有一个java硬编码的代码片段,如下所示。如何使用协议或其他Swift内容在Swift 3上重写此代码 interface Startable { int started(String name); } class A{ private String name; private Startable startable; public A(String name, Startable startable) { name = name;
interface Startable {
int started(String name);
}
class A{
private String name;
private Startable startable;
public A(String name, Startable startable) {
name = name;
startable = startable;
}
public void doSomething() {
if (startable != null) {
startable.started(name);
}
}
}
在您的Java示例中,
Startable
是一个“函数接口”,它在Swift中紧随其后,被称为“函数类型”,我认为这就是您对Closure
的意思,请参见中的“函数类型”部分
根据Swift文件:
功能类型
每个函数都有一个特定的函数类型,由参数组成
类型和函数的返回类型
例如:
func addTwoInts(_ a: Int, _ b: Int) -> Int {
return a + b
}
func multiplyTwoInts(_ a: Int, _ b: Int) -> Int {
return a * b
}
本例定义了两个简单的数学函数,称为
添加两个点
和多个点
。这些函数每个取两个整数
值,并返回一个Int值,该值是执行
适当的数学运算
这两个函数的类型都是(Int,Int)->Int
使用函数类型
您使用的函数类型与Swift中的任何其他类型一样。对于
例如,可以将常量或变量定义为函数的一部分
键入并为该变量分配适当的函数:
var mathFunction: (Int, Int) -> Int = addTwoInts
这可以理解为:
定义一个名为mathFunction
的变量,该变量的类型为“a”
函数“它接受两个Int
值,并返回一个Int
值。”
设置此新变量以引用名为addTwoInts
的函数
如果您想做与java示例中完全相同的事情,那么可以使用Swift作为
class A {
var name : String
var startable : ((String) -> Int)?
init(_ name : String, _ startable : ((String) -> Int)?) {
self.name = name
self.startable = startable
}
func doSometing() {
if let fn = startable {
fn(name)
}
}
}
在您的Java示例中,
Startable
是一个“函数接口”,它在Swift中紧随其后,被称为“函数类型”,我认为这就是您对Closure
的意思,请参见中的“函数类型”部分
根据Swift文件:
功能类型
每个函数都有一个特定的函数类型,由参数组成
类型和函数的返回类型
例如:
func addTwoInts(_ a: Int, _ b: Int) -> Int {
return a + b
}
func multiplyTwoInts(_ a: Int, _ b: Int) -> Int {
return a * b
}
本例定义了两个简单的数学函数,称为
添加两个点
和多个点
。这些函数每个取两个整数
值,并返回一个Int值,该值是执行
适当的数学运算
这两个函数的类型都是(Int,Int)->Int
使用函数类型
您使用的函数类型与Swift中的任何其他类型一样。对于
例如,可以将常量或变量定义为函数的一部分
键入并为该变量分配适当的函数:
var mathFunction: (Int, Int) -> Int = addTwoInts
这可以理解为:
定义一个名为mathFunction
的变量,该变量的类型为“a”
函数“它接受两个Int
值,并返回一个Int
值。”
设置此新变量以引用名为addTwoInts
的函数
如果您想做与java示例中完全相同的事情,那么可以使用Swift作为
class A {
var name : String
var startable : ((String) -> Int)?
init(_ name : String, _ startable : ((String) -> Int)?) {
self.name = name
self.startable = startable
}
func doSometing() {
if let fn = startable {
fn(name)
}
}
}
到目前为止你试过什么?请展示您在Swift中实现它的尝试,以及您遇到的问题。到目前为止您尝试了什么?请展示您在Swift中实现它的尝试,以及您遇到的问题。