[FIXED] Objective-C, Wie konvertiere ich diese Java-Anweisung in Objective-C-Code?

Ausgabe

Ich habe einen sehr einfachen Java-Code wie diesen. Ich habe keine Ahnung, wie man das in Objective-C macht. Insbesondere der statische Teil, der die Methode getLocalAddress() aufruft und sie der statischen String-Variablen zuweist. Ich weiß, wie man eine statische Variable und eine statische Methode in Objective setzt, aber ich weiß nicht, wie man diesen statischen {}-Teil in Java implementiert.

public class Address {

     public static String localIpAddress;

    static {
        localIpAddress =  getLocalIpAddress();
    }

    public Address() {

    }

    static String getLocalIpAddress() {
         //do something to get local ip address
     }
}

Ich habe dies in meiner .h-Datei hinzugefügt

 #import <Foundation/Foundation.h>

 extern NSString *localIpAddress;

 @class WifiAddrss;

 @interface Address : NSObject {

 }

 @end

Und meine .m-Datei sieht so aus

 #import "Address.h"
 #import "WifiAddress.h"
 
 @implementation Address

 +(void)initialize{
     if(self == [Address class]){
         localIpAddress = [self getLocalIpAddress];
     }
 }

 +(NSString *)getLocalIpAddress{
      return address here
 }

 -(id)init{    
     self = [super init];
     if (self == nil){
         NSLog(@"init error");
     }
     
     return self;
 }
 @end

Und jetzt erhalte ich einen Verknüpfungsfehler und er beschwert sich über den Teil “extern NSString * localIpAddress”. Wenn ich das extern auf statisch ändere, funktioniert es einwandfrei. Aber was ich tun wollte, ist, dass ich den Geltungsbereich der Variablen “localIpAddress” als global festlegen möchte. Denn wenn ich in Objective-C “static” vor eine Variable setze, dann ist die Variable nur in der Klasse sichtbar. Aber dieses Mal möchte ich das als globale Variable machen. Meine Frage ist also, wie man die Variable “localIpAddress” als globale Variable erstellt, die einmal initialisiert wird, wenn die Adressklasse zum ersten Mal erstellt wird.

Lösung

Schauen Sie hier, um den statischen Block von Java in Objective C zu emulieren:
Äquivalent zum statischen Konstruktor in Objective-C?


Beantwortet von –
blizpasta


Antwort geprüft von –
Marilyn (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] openURL: in iOS 10 veraltet

Ausgabe Apple mit iOS 10 ist veraltet openURL: for openURL:option:completionHandler Wenn ich: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://www.google.com"]]; Wie wird…