swift - 如何使用swift将方向度数转换为文字?

标签 swift swift4

我有一个oc版本

public class Heading
{
    private string[] m_names[]=new string[8] { "N","NE","E","SE","S","SW","W","NW" };
    public string this[float angle]{get{return m_names[((int)((angle-22.5f)/45.0f))&7]}}
}

然后我转换成swift版本

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {        
    let trueHeading = newHeading.trueHeading
    let angle = Double.pi / 180 * trueHeading

    let dir = [ "N","NE","E","SE","S","SW","W","NW" ]
    let dir2=dir[(((trueHeading-22.5)/45.0)) as Int & 7]
}

但这行不通,这行出现错误“Expected ',' separator”

let dir2=dir[(((trueHeading-22.5)/45.0)) as Int & 7]

最佳答案

你想要:

func compassDirection(for heading: CLLocationDirection) -> String? {
    if heading < 0 { return nil }

    let directions = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]
    let index = Int((heading + 22.5) / 45.0) & 7
    return directions[index]
}

注意,是+,不是-

或者您可以使用 rounded 来避免混淆是加还是减 22.5:

let index = Int((heading / 45).rounded()) % 8

然后您可以像这样使用此 compassDirection 结果:

func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
    guard let direction = compassDirection(for: newHeading.trueHeading) else {
        // handle lack of heading here
        return
    }

    // you can use `direction` here
}

关于swift - 如何使用swift将方向度数转换为文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118390/

相关文章:

ios - 如何为 Collection View 创建多个数据源?

ios - 在 swift 中禁用 mmdrawer viewcontroller 菜单

ios - WKWebView媒体控件标题显示Url

ios - 多个UITableView可以使用同一个UITableviewcell吗?

swift - CollectionView,两个按钮无法通信 - Swift 4

swift - 如何确定 Swift 中滑动的速度和角度

ios - 在 SWIFT 中访问 NSMutableArray 元素

ios - 无法将类型 'CGPoint!' 的值转换为预期的参数类型 'UnsafeMutablePointer<CGPoint>'

ios - 将倒数计时器值重置为数组中保存的默认值

swift - 使用 swift 4 在波轮下查看图像