Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在类似swift的Java接口中使用闭包_Java_Swift_Interface_Closures - Fatal编程技术网

如何在类似swift的Java接口中使用闭包

如何在类似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;

我有一个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;
        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中实现它的尝试,以及您遇到的问题。