Objective-C中的语法(可以是强制语法)

时间:2018-01-21 08:00:31

标签: objective-c object syntax casting

我是 Objective-C 的新手并尝试使用这些语法。

+ (MKCoordinateSpan)MKCoordinateSpan:(id)json
{
  json = [self NSDictionary:json];
  return (MKCoordinateSpan){
    [self CLLocationDegrees:json[@"latitudeDelta"]],
    [self CLLocationDegrees:json[@"longitudeDelta"]]
  };
}

根据我的猜测,MKCoordinateSpan是一个类。并且{}语法尝试创建一个对象并将这些对象强制转换为实例MKCoordinateSpan。这是对的吗?或者尝试使用两个值latitudeDelta和longitudeDelta

创建对象类型MKCoordinateSpan
  (MKCoordinateSpan){
    [self CLLocationDegrees:json[@"latitudeDelta"]],
    [self CLLocationDegrees:json[@"longitudeDelta"]]
  };

1 个答案:

答案 0 :(得分:1)

MKCoordinateSpanstruct,而非班级。它被定义为:

typedef struct {
    CLLocationDegrees latitudeDelta;
    CLLocationDegrees longitudeDelta;
} MKCoordinateSpan;

因此,您问题中的代码是创建此struct的实例。

实现相同目标的更为习惯的方法是使用MKCoordinateSpanMake

+ (MKCoordinateSpan)MKCoordinateSpan:(id)json {
    json = [self NSDictionary:json];
    return MKCoordinateSpanMake([self CLLocationDegrees:json[@"latitudeDelta"]],
                                [self CLLocationDegrees:json[@"longitudeDelta"]]);
}

将来,按 shift + 命令 + O (字母“oh”),然后输入MKCoordinateSpan,你可以直接跳到类型的定义并消除任何歧义。或 alt - 点击代码中的MKCoordinateSpan类型,您可以看到快速帮助:

enter image description here