Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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:具有中缀运算符/顶级功能的发布版本崩溃_Swift_Crash_Infix Operator - Fatal编程技术网

Swift:具有中缀运算符/顶级功能的发布版本崩溃

Swift:具有中缀运算符/顶级功能的发布版本崩溃,swift,crash,infix-operator,Swift,Crash,Infix Operator,我已经在Swift中创建了一个中缀运算符,用于比较两个可选的、相等的值(这是我通常需要做的事情): 如您所见,我有几个可选参数需要使用中缀运算符相互比较。如果我使用debugconfiguration构建,那么一切都可以正常工作。但是,如果我使用release配置进行构建,则会发生此崩溃(通过Fabric/Crashlytics报告): EXC\u错误\u访问内核\u无效\u地址为0x4000000000000000 堆栈跟踪很长,但此处发生了相关的崩溃: libswiftCore.dylib

我已经在Swift中创建了一个中缀运算符,用于比较两个可选的、相等的值(这是我通常需要做的事情):

如您所见,我有几个可选参数需要使用中缀运算符相互比较。如果我使用
debug
configuration构建,那么一切都可以正常工作。但是,如果我使用
release
配置进行构建,则会发生此崩溃(通过Fabric/Crashlytics报告):

EXC\u错误\u访问内核\u无效\u地址为0x4000000000000000

堆栈跟踪很长,但此处发生了相关的崩溃:

libswiftCore.dylib      swift_unknownRetain + 16

User.swift line 24    function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded> of static TransportLayer.== infix (TransportLayer.User,  TransportLayer.User) -> Swift.Bool
libswiftCore.dylib swift\u未知保留+16
User.swift第24行静态TransportLayer的函数签名专用化==中缀(TransportLayer.User,TransportLayer.User)->swift.Bool
第24行
直接对应于
public func==(lhs:User,rhs:User)->Bool{
。如果删除中缀运算符
=?
,则不会发生崩溃

如果我将中缀运算符替换为顶级函数
public func==(lhs:User,rhs:User)->Bool{…}
(与
=?
完全相同的实现),则仍然会发生崩溃。因此它不是中缀运算符特有的

同样,这只发生在Swift 1.2下的发布版本上。我不能使用Swift 2,因为它没有超出测试版,所以请不要将其作为答案提交

更新 该问题似乎与模块相关。中缀运算符和顶级函数是在名为
实用程序
的单独模块中定义的,我正在将其导入
User.swift
文件中。我尝试将
isEqual
函数移动到同一文件中,崩溃不再发生。但我宁愿使用该函数离子进入正确的模块

public func ==(lhs: User, rhs: User) -> Bool {
  if lhs.id != rhs.id {
    return false
  }

  return
    lhs.firstName ==? rhs.firstName &&
    lhs.lastName ==? rhs.lastName &&
    lhs.photoURL ==? rhs.photoURL &&
    lhs.orgID == rhs.orgID
}
libswiftCore.dylib      swift_unknownRetain + 16

User.swift line 24    function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded> of static TransportLayer.== infix (TransportLayer.User,  TransportLayer.User) -> Swift.Bool