iOS專案開發實戰——獲取本機IP地址

乞力馬紮羅的雪CYF發表於2015-09-08

     在設計iOS網路開發中,我們需要獲取本機的IP地址,那麼通過Swift呼叫OC如何來實現呢?我將會通過一個Swift的iOS專案,然後通過呼叫OC的方法,來實現這個功能。

(1)在Swift專案中新建Cocoa Touch Class,語言選擇Objective-C,然後自動會提示新建一個Swift和OC的橋接檔案,選擇Yes就好。然後就會自動生成一個 “專案名-Bridging-Header.h”的檔案。我新建的OC檔名是GetIPAddress.


(2)然後在橋接檔案中加入OC的標頭檔案:

#import "GetIPAddress.h"


(3)然後在OC標頭檔案GetIPAddress.h中實現如下:

#import <Foundation/Foundation.h>

@interface GetIPAddress : NSObject

+ (NSString *)deviceIPAdress;

@end

(4)然後在OC的實現檔案GetIPAddress.m中實現如下:

//
//  GetIPAddress.m
//  AlertDialogDemo
//
//  Created by chenyufeng on 15/9/8.
//  Copyright (c) 2015年 chenyufengweb. All rights reserved.
//

#import "GetIPAddress.h"


#include <ifaddrs.h>
#include <arpa/inet.h>

@implementation GetIPAddress

+ (NSString *)deviceIPAdress {
  NSString *address = @"an error occurred when obtaining ip address";
  struct ifaddrs *interfaces = NULL;
  struct ifaddrs *temp_addr = NULL;
  int success = 0;
  
  success = getifaddrs(&interfaces);
  
  if (success == 0) { // 0 表示獲取成功
    
    temp_addr = interfaces;
    while (temp_addr != NULL) {
      if( temp_addr->ifa_addr->sa_family == AF_INET) {
        // Check if interface is en0 which is the wifi connection on the iPhone
        if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
          // Get NSString from C String
          address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
        }
      }
      
      temp_addr = temp_addr->ifa_next;
    }
  }
  
  freeifaddrs(interfaces);
  
  NSLog(@"手機的IP是:%@", address);
  return address;
}

@end

(5)最後在Swift程式碼中呼叫:

override func viewDidLoad() {
    super.viewDidLoad()

    var ipAddress = GetIPAddress.deviceIPAdress()//這是一個類方法,可以直接通過類名呼叫;
    
    var dialog = UIAlertView()
    dialog.title = "本機IP"
    dialog.message = ipAddress
    dialog.show()
    
    
  }

(6)最後的實現結果如下:


github主頁:https://github.com/chenyufeng1991  。歡迎大家訪問!


相關文章