而不是switch-case,更有效地选择字符串

Pet*_* W. 2 objective-c switch-statement

首先,我很抱歉问题标题.

现在,问题是:我正在编写一个iPhone应用程序,它可以读取指南针值并显示设备所面向的方向名称.写作时,我这样做:

switch (trueHeadingRounded) {
    case 23 ... 68:
        cardinalDirection = @"northeast";
        break;
    case 69 ... 114:
        cardinalDirection = @"east";
        break;
    //ad infinitum
Run Code Online (Sandbox Code Playgroud)

我该如何缩短这部分?一定有更好的方法.

Fab*_*iez 5

您可以执行以下操作:

  1. 创建一个算术函数,根据角度给出一个数字.该数字介于0和7之间(东北为0,东为1,依此类推).看起来像(x - 23) / 45或类似的东西.
  2. 然后创建一个映射数组,从数字中为您提供方向的名称. [0] => 'Northeast', [1] => 'East', etc.
  3. 在数组中查找要返回的名称. return mappingArray[indexFromAngle(x)]