调试版本与发布版本??xcode

调试版本与发布版本??xcode,xcode,swift,Xcode,Swift,调试版本和发布版本在代码/依赖性方面有什么区别吗 我最近开始使用试飞(这使用的是发布版本),除了崩溃之外什么都没有。当我为调试而构建时,它可以完美地工作 有人有这个问题吗 当应用程序点击“return true”时,我得到一个exc_断点 这看起来很奇怪。当你所要做的就是返回“true”时,没有什么错 导入UIKit 导入核心定位 func calculateRelevance(唱片集:AlbumLight,当前位置:CLLocation,当前城市:String)->Bool{ 让我们从loca

调试版本和发布版本在代码/依赖性方面有什么区别吗

我最近开始使用试飞(这使用的是发布版本),除了崩溃之外什么都没有。当我为调试而构建时,它可以完美地工作

有人有这个问题吗

当应用程序点击“return true”时,我得到一个exc_断点 这看起来很奇怪。当你所要做的就是返回“true”时,没有什么错

导入UIKit
导入核心定位
func calculateRelevance(唱片集:AlbumLight,当前位置:CLLocation,当前城市:String)->Bool{
让我们从locationla:CLLocationDegrees=CLLocationDegrees(album.la!)
let fromLocationLo:CLLocationDegrees=CLLocationDegrees(album.lo!)
变量fromLocation:CLLocation=CLLocation(纬度:fromLocationLa,经度:fromLocationLo)
让距离=fromLocation.distanceFromLocation(当前位置)
如果album.isActive==true{
如果album.hasRange==true{
如果距离<两倍(相册范围!){
返回真值
}
否则{
返回错误
}
}
否则{
如果currentCity==album.city{
返回真值
}
否则{
返回错误
}
}
}
否则{
返回错误
}
}

更新:


经过多次尝试和错误,我发现添加println()以获得某些值可以防止我的bug。出于某种原因,除了在使用值之前调用println()之外,非nil的内容会变成nil。对我来说毫无意义……

作为猜测,我认为优化器在咬你
fromLocationLa
fromLocationLo
fromLocation
distance
仅使用一次。这意味着可以进行以下优化

…
let fromLocationLa: CLLocationDegrees = CLLocationDegrees(album.la!)
let fromLocationLo: CLLocationDegrees = CLLocationDegrees(album.lo!)

var fromLocation: CLLocation =  CLLocation(latitude: fromLocationLa, longitude: fromLocationLo)
let distance = fromLocation.distanceFromLocation(currentLocation)

if album.isActive == true {
    if album.hasRange == true {
        if distance < Double(album.range!) {

            return true

        }
        else {

            return false

        }
    }
…
…
让我们从locationla:CLLocationDegrees=CLLocationDegrees(album.la!)
let fromLocationLo:CLLocationDegrees=CLLocationDegrees(album.lo!)
变量fromLocation:CLLocation=CLLocation(纬度:fromLocationLa,经度:fromLocationLo)
让距离=fromLocation.distanceFromLocation(当前位置)
如果album.isActive==true{
如果album.hasRange==true{
如果距离<两倍(相册范围!){
返回真值
}
否则{
返回错误
}
}
…
优化到

if album.isActive == true {
    if album.hasRange == true {
        return CLLocation(latitude: CLLocationDegrees(album.la!), longitude: CLLocationDegrees(album.lo!)).distanceFromLocation(currentLocation) < Double(album.range!)
    }
如果album.isActive==true{
如果album.hasRange==true{
返回CLLocation(纬度:CLLocationDegrees(album.la!),经度:CLLocationDegrees(album.lo!)).distanceFromLocation(currentLocation)
这可以解释优化代码中的奇数行。它还将大量隐式展开放在一行上

考虑到您似乎遇到的问题,在展开可选包装时可能需要更加小心

let fromLocationLa: CLLocationDegrees? = album.la != nil ? CLLocationDegrees(album.la!) : nil
let fromLocationLo: CLLocationDegrees? = album.la != nil ? CLLocationDegrees(album.lo!) : nil

var fromLocation: CLLocation? = fromLocationLa != nil && fromLocationLo != nil ? CLLocation(latitude: fromLocationLa!, longitude: fromLocationLo!) : nil
let distance = fromLocation?.distanceFromLocation(currentLocation)

if album.isActive == true {
    if album.hasRange == true {
        if distance != nil && album.range != nil && distance! < Double(album.range!) {

            return true

        }
        else {

            return false

        }
    }
let fromLocationLa:CLLocationDegrees?=album.la!=nil?CLLocationDegrees(album.la!):nil
let fromLocationLo:CLLocationDegrees?=album.la!=nil?CLLocationDegrees(album.lo!):nil
变量fromLocation:CLLocation?=fromLocationLa!=nil&&fromLocationLo!=nil?CLLocation(纬度:fromLocationLa!,经度:fromLocationLo!):nil
让距离=距离位置?.distanceFromLocation(当前位置)
如果album.isActive==true{
如果album.hasRange==true{
如果距离!=nil&&album.range!=nil&&distance!
这都是真的:)但是为什么发布版本会出现调试没有出现的问题呢?为什么println()会出现问题呢在实际调用之前的线路上有一个修复。它只以与任何其他调用相同的方式调用一个值,是否?无论如何。我完全按照您的建议进行了修复。我对它进行了优化,并将一些内容从一个单独的函数移回了主函数。移动选项太多显然会导致问题。很高兴知道我使用的是t他说得对。不管怎样,理解真正的问题被高估了。我也从代码中删除了所有println(),只是要确保我没有以同样的方式修复任何其他错误。发现了更多的错误。真的很奇怪……跟踪准确的问题可能非常困难。跟踪准确的优化(或优化组合)这导致您的失败可能非常困难。在上面发布+10.000行代码以便让其他人发现我的错误也有点粗鲁;)
let fromLocationLa: CLLocationDegrees? = album.la != nil ? CLLocationDegrees(album.la!) : nil
let fromLocationLo: CLLocationDegrees? = album.la != nil ? CLLocationDegrees(album.lo!) : nil

var fromLocation: CLLocation? = fromLocationLa != nil && fromLocationLo != nil ? CLLocation(latitude: fromLocationLa!, longitude: fromLocationLo!) : nil
let distance = fromLocation?.distanceFromLocation(currentLocation)

if album.isActive == true {
    if album.hasRange == true {
        if distance != nil && album.range != nil && distance! < Double(album.range!) {

            return true

        }
        else {

            return false

        }
    }