Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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
如何让编译器选择my函数而不是Swift常规函数?_Swift - Fatal编程技术网

如何让编译器选择my函数而不是Swift常规函数?

如何让编译器选择my函数而不是Swift常规函数?,swift,Swift,我有这个功能 @inlinable public func assert( _ condition: @autoclosure () -> Bool = Bool(), _ message: @autoclosure () -> String = String(), attributes: [String: Any]? = nil, file: StaticString = #file, line: UInt = #line ) { print("OURS")

我有这个功能

@inlinable
public func assert(
  _ condition: @autoclosure () -> Bool = Bool(),
  _ message: @autoclosure () -> String = String(),
  attributes: [String: Any]? = nil,
  file: StaticString = #file,
  line: UInt = #line
) {
  print("OURS")
  if !condition() {
    assertionFailure(message, attributes: attributes, file: file, line: line)
  }
}
我希望能够在代码中调用assert1==2,但日志中没有显示打印,似乎调用了global Swift.assert函数


无论我如何更改@autoclosure(带/不带)、带/不带默认值,或者它是否为@inlineable、public或not),我都会得到相同的结果。我不想重命名我的函数,也不想将它嵌套在类中,这样它就可以通过函数重载进行前缀,编译器总是更喜欢最专业的版本。如果您的函数不比内置函数更专业,而只是添加了更多带有默认输入参数的输入参数,那么编译器无法将其与Swift标准库区分开来

您需要使用名称acing并使用自己的模块名调用函数,如

MyModule.assert(1 == 2)

对于函数重载,编译器总是选择最专业的版本。如果您的函数不比内置函数更专业,而只是添加了更多带有默认输入参数的输入参数,那么编译器无法将其与Swift标准库区分开来

您需要使用名称acing并使用自己的模块名调用函数,如

MyModule.assert(1 == 2)

谢谢我很害怕。那么我的模块名是什么?它是一个iOS应用程序,在名为Assertions.swift的文件中的一个文件夹中声明了此功能。该模块由目标定义,而不是由文件名或文件夹定义。所以你的模块名称应该是你的目标的名称。我的目标中有空格,这将如何工作-它是我的App@K.R.查看答案,了解如何计算模块名称谢谢。我很害怕。那么我的模块名是什么?它是一个iOS应用程序,在名为Assertions.swift的文件中的一个文件夹中声明了此功能。该模块由目标定义,而不是由文件名或文件夹定义。所以你的模块名称应该是你的目标的名称。我的目标中有空格,这将如何工作-它是我的App@K.R.检查答案,了解如何计算模块名称