Swift将十进制坐标转换为度,分,秒,方向

Mwc*_*Mac 2 gps swift xcode6

我该如何将其转换为快速?我最好的猜测是所有的int都变成了var.删除所有@那个领导".如果有的话可以指向一个好的来源,以了解事情如何转换,这将是伟大的.

- (NSString*)coordinateString {

int latSeconds = (int)(self.latitude * 3600);
int latDegrees = latSeconds / 3600;
latSeconds = ABS(latSeconds % 3600);
int latMinutes = latSeconds / 60;
latSeconds %= 60;

int longSeconds = (int)(self.longitude * 3600);
int longDegrees = longSeconds / 3600;
longSeconds = ABS(longSeconds % 3600);
int longMinutes = longSeconds / 60;
longSeconds %= 60;

NSString* result = [NSString stringWithFormat:@"%d°%d'%d\"%@ %d°%d'%d\"%@",
                    ABS(latDegrees),
                    latMinutes,
                    latSeconds,
                    latDegrees >= 0 ? @"N" : @"S",
                    ABS(longDegrees),
                    longMinutes,
                    longSeconds,
                    longDegrees >= 0 ? @"E" : @"W"];

return result;    
}
Run Code Online (Sandbox Code Playgroud)

我转换它的尝试,但Xcode证明我错了.将修复建议与ABS重新发布.现在看起来是否正确?

func coordinateString {

var latSeconds = (Int8)(self.latitude * 3600);
var latDegrees = latSeconds / 3600;
latSeconds = abs(latSeconds % 3600);
var latMinutes = latSeconds / 60;
latSeconds %= 60;

var longSeconds = (Int8)(self.longitude * 3600);
var longDegrees = longSeconds / 3600;
longSeconds = abs(longSeconds % 3600);
var longMinutes = longSeconds / 60;
longSeconds %= 60;

    var result = (String(format: "%d°%d'%d\"%@ %d°%d'%d\"%@"),
abs(latDegrees),
latMinutes,
latSeconds,
latDegrees >= 0 ? "N" : "S",
abs(longDegrees),
longMinutes,
longSeconds,
longDegrees >= 0 ? "E" : "W",

return result;
}
Run Code Online (Sandbox Code Playgroud)

Leo*_*bus 15

Xcode 8.3.2•Swift 3.1

func coordinateString(_ latitude: Double,_ longitude: Double) -> String {
    var latSeconds = Int(latitude * 3600)
    let latDegrees = latSeconds / 3600
    latSeconds = abs(latSeconds % 3600)
    let latMinutes = latSeconds / 60
    latSeconds %= 60
    var longSeconds = Int(longitude * 3600)
    let longDegrees = longSeconds / 3600
    longSeconds = abs(longSeconds % 3600)
    let longMinutes = longSeconds / 60
    longSeconds %= 60
    return String(format:"%d°%d'%d\"%@ %d°%d'%d\"%@",
                  abs(latDegrees),
                  latMinutes,
                  latSeconds, latDegrees >= 0 ? "N" : "S",
                  abs(longDegrees),
                  longMinutes,
                  longSeconds,
                  longDegrees >= 0 ? "E" : "W" )
}


coordinateString(-22.9133950, -43.2007100)   // "22°54'48"S 43°12'2"W"
Run Code Online (Sandbox Code Playgroud)


Dav*_*eek 5

我刚刚编辑了Leo Dabus 的答案,将这些字符串作为单独的值。如果对其他人有帮助:

斯威夫特 3 和斯威夫特 4

func getLocationDegreesFrom(latitude: Double) -> String {

    var latSeconds = Int(latitude * 3600)

    let latDegrees = latSeconds / 3600

    latSeconds = abs(latSeconds % 3600)

    let latMinutes = latSeconds / 60

    latSeconds %= 60

    return String(

        format: "%d°%d'%d\"%@",
        abs(latDegrees),
        latMinutes,
        latSeconds,
        latDegrees >= 0 ? "N" : "S"

    )

}

func getLocationDegreesFrom(longitude: Double) -> String {

    var longSeconds = Int(longitude * 3600)

    let longDegrees = longSeconds / 3600

    longSeconds = abs(longSeconds % 3600)

    let longMinutes = longSeconds / 60

    longSeconds %= 60

    return String(

        format: "%d°%d'%d\"%@",
        abs(longDegrees),
        longMinutes,
        longSeconds,
        longDegrees >= 0 ? "E" : "W"

    )

}
Run Code Online (Sandbox Code Playgroud)