将计算所得的属性快速转换为目标C语法

问题描述 投票:2回答:1

我在Swift应用程序中有这段代码,并对它在Objective C中的等效语法感到好奇

typealias Signal = (Float) -> (Float)

static let sine: Signal = { (time: Float) -> Float in
    return amplitude * sin(2.0 * Float.pi * frequency * time)
}

我相信我会声明Signal如下:

typedef float (^Signal)(float);

但是我不确定如何设置一种类似的方式来设置语法以检索值。我想到了一种类方法,但效果不太理想。

谢谢

objective-c objective-c-blocks
1个回答
1
投票

这不是计算属性。这是一个“ closure”。

因此,它为闭包定义了一个类型别名,该闭包采用Float作为参数并返回Float

typealias Signal = (Float) -> (Float)

您可以像这样创建此Signal闭包的实例:

let doubler: Signal = { $0 * 2 }

您可以像这样调用该闭包:

print(doubler(21))     // 42

等效的Objective-C语法,用于定义“ block”的类型:

typedef float (^Signal)(float);

创建Signal块的实例:

Signal doubler = ^(float input) {
    return input * 2;
};

并且称呼它:

NSLog(@"%f", doubler(21));   // 42
© www.soinside.com 2019 - 2024. All rights reserved.