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)