gpt4 book ai didi

objective-c - swift 4 : Non-nominal type 'T' does not support explicit initialization when converting Objective-c to Swift

转载 作者:行者123 更新时间:2023-11-28 11:57:56 25 4
gpt4 key购买 nike

我正在尝试将 Objective-C 项目转换为 Swift,这是 Objective-C 中的 .h 文件之一:

typedef void(^PrintBlock)(HLPrinter *printer);

@interface ShoppingViewController : UIViewController

@property (copy, nonatomic) PrintBlock printBlock;

@end

而在.m文件中,有一个函数:

HLPrinter *printer = [self getPrinter];

if (_printBlock) {
_printBlock(printer);
}

这就是我将其转换为 Swift 的方式:

typealias PrintBlock = (_ printer: HLPrinter?) -> Void

但是当我尝试将上面的函数转换为 Swift 时,我得到了一个 'Non-nominal type 'PrintBlock' (aka '(Optional<HLPrinter>) -> ()') does not support explicit initialization'当我试图声明类型为 PrintBlock 的变量时出错:

let pb = PrintBlock()

我不熟悉 Objective-C,所以我应该如何使用 _printerBlock 转换该函数?进入 swift ?

最佳答案

PrintBlock 是闭包的别名。您不能像创建类或结构那样简单地创建实例。您需要为该属性分配一个闭包(或函数)。

Swift 代码为:

typealias PrintBlock = (_ printer: HLPrinter?) -> Void

class ShoppingViewController: UIViewController {
var printBlock: PrintBlock?

func getPrinter() -> HLPrinter {
return somePrinter
}

func someFunction() {
if let printBlock = printBlock {
let printer = getPrinter()
printBlock(printer)
}
}
}

调用代码类似于:

let vc = ShoppingViewController()
vc.printBlock = { (printer) in
// do something with printer
}

或者如果你有一个函数:

func someFunction(_ printer: HLPrinter) {
}

你可以分配:

vc.printBlock = someFunction

根据您在问题中提供的部分信息,这里有一些假设。

关于objective-c - swift 4 : Non-nominal type 'T' does not support explicit initialization when converting Objective-c to Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50577264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com