Swiftを使って、位置情報を取得してみよう!
Swiftを使って位置情報を使ってみよう
今日はSwiftを使った位置情報の取得を試してみたいと思います。
今日もObjective-Cの書式と比較しながら進めてみます。
ライブラリのimport
1
2
| // ViewController.hファイル
#import <UIKit/UIKit.h>
|
1
2
3
| // ViewController.mファイル
#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>
|
1
2
3
| // ViewController.swiftファイル
import UIKit
import CoreLocation
|
インスタンス変数の宣言
1
2
3
4
5
6
| // ViewController.mファイル
@interface ViewController ()
@property (strong, nonatomic) CLLocationManager *lm;
@end
|
1
2
3
4
5
6
7
| // ViewController.swiftファイル
class ViewController: UIViewController {
var lm:CLLocationManager?
.....
}
|
Delegate Protocolの宣言
1
2
3
4
| // ViewController.mファイル
@interface ViewController() <CLLocationManagerDelegate> {
......
}
|
1
2
3
4
| // ViewController.swiftファイル
class ViewController: UIViewController, CLLocationManagerDelegate {
......
}
|
viewDidLoadメソッド
1
2
3
4
5
6
7
8
| // ViewController.mファイル
- (void)viewDidLoad {
[super viewDidLoad];
if([self.lm respondToSelector:@selector(requestAlwaysAuthorization)]) {
[self.lm requestAlwaysAuthorization];
}
}
|
1
2
3
4
5
6
7
| override func viewDidLoad() {
super.viewDidLoad()
if((self.lm?.respondToSelector("requestAlwaysAuthorization")) != nil) {
self.lm?.requestAlwaysAuthorization()
}
}
|
CLLocationManagerDelegateメソッド
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| // ViewController.mファイル
// 位置情報の許可設定
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
if (status == kCLAuthorizationStatusNotDetermined) {
} else if(status == kCLAuthorizationStatusAuthorizedAlways) {
[self.lm startUpdatingLocation];
} else if(status == kCLAuthorizationStatusAuthorizedWhenInUse) {
[self.lm startUpdatingLocation];
}
}
// 位置情報の更新ハンドリング処理
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *currentLocation = locations.lastObject;
CLLocationDegrees lat = currentLocation.coordinate.latitude;
CLLocationDegrees lng = currentLocation.coordinate.longitude;
CLLocationDegrees alt = currentLocation.altitude;
CLLocationDirection course = currentLocation.course;
CLLocationSpeed spd = currentLocation.speed;
CLLocationAccuracy hacc = currentLocation.horizontalAccuracy;
CLLocationAccuracy vacc = currentLocation.verticalAccuracy;
NSDate *dt = currentLocation.timestamp;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| // ViewController.swiftファイル
// 位置情報の許可設定
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
if(status == .NotDetermined) {
} else if(status == .Authorized) {
self.lm?.startUpdatingLocation()
} else if(status == .AuthorizedWhenInUse) {
self.lm?.startUpdatingLocation()
}
}
// 位置情報の更新ハンドリング処理
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
var currentLocation:CLLocation? = locations.last as? CLLocation
var lat:CLLocationDegrees? = currentLocation?.coordinate.latitude
var lng:CLLocationDegrees? = currentLocation?.coordinate.longitude
var alt:CLLocationDegrees? = currentLocation?.altitude
var course:CLLocationDirection? = currentLocation?.course
var spd:CLLocationSpeed? = currentLocation?.speed
var hacc:CLLocationAccuracy? = currentLocation?.horizontalAccuracy
var vacc:CLLocationAccuracy? = currentLocation?.verticalAccuracy
var dt:NSDate! = currentLocation?.timestamp
}
|
これでコーディングは完了です。
Swiftでも位置情報が取得できるようになりました。
次回はSwiftで何を書こうかな。
といったところで本日はここまで。