如何从 Swift class 检索目标 C class 中的 Userdefault?
How to retrieve Userdefault in objectiveC class from Swift class?
我已经在 swift class 中保存了 userdefault 字符串值,如何在 Objective C class 中检索该值?我已经使用了 它正在从 Objc 工作到 swift 但反之亦然。
示例代码
保存在 ObjC 中 class
[[NSUserDefaults standardUserDefaults] setObject:@"HELLO" forKey:@"kcString"];
在 Swift class 使用
检索
if let str = UserDefaults.standard.string(forKey: "kcString") {
print("Found kcString \(str)")
} else {
print("No string for key kcString")
}
但不能以相反的方式工作。
保存在 swift class 使用 :
UserDefaults.standard.set("hello", forKey: "kcString")
试图在 objc class 中检索使用:
self.val = [[NSUserDefaults standardUserDefaults] stringForKey:@"kcString"];
因为用户默认值与您的应用程序相关联,而不是与任何文件相关联。您可以使用任何类型的文件访问用户默认值,无论它是在 swift 还是 objective c 中。我假设您正在使用单一目标。请遵循概念。
我做了一个swift项目。
我添加了一个 objective c 文件。
我还添加了桥接头文件。
现在我将访问用户默认值:
在 .h 文件中将两种方法描述为:
@interface UDF_Objc_Access : NSObject
+(void)set_udf_value_objc:(NSString *)value for:(NSString*)key;
+(NSString *)get_udf_swift_value_for:(NSString*)key;
@end
在.m实现文件中定义为:
@implementation UDF_Objc_Access
+(void)set_udf_value_objc:(NSString *)value for:(NSString *)key {
[[NSUserDefaults standardUserDefaults] setObject:value forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+(NSString *)get_udf_swift_value_for:(NSString *)key {
return [[NSUserDefaults standardUserDefaults] stringForKey:key];
}
@end
现在在你的 Appdelegate.swift 中做:
/*
key names
swift key = "swift_key"
objective c key = "objc_key"
*/
let swift_key = "swift_key"
let objc_key = "objc_key"
//MARK:- Case 1
/*
Save value from swift file & get it from objective c file
*/
UserDefaults.standard.set("This value is saved from swift class", forKey: swift_key)
UserDefaults.standard.synchronize()
//getting value from objective c class
print(UDF_Objc_Access.get_udf_swift_value_(for: swift_key))
/*
Set value from objective c file & get it with swift
*/
UDF_Objc_Access.set_udf_value_objc("This value is saved from objective c file", for: objc_key)
//print value form swift
print(UserDefaults.standard.value(forKey: objc_key)!)
注意:如果您使用多个目标,请使用应用组。
我已经在 swift class 中保存了 userdefault 字符串值,如何在 Objective C class 中检索该值?我已经使用了
示例代码
保存在 ObjC 中 class
[[NSUserDefaults standardUserDefaults] setObject:@"HELLO" forKey:@"kcString"];
在 Swift class 使用
检索if let str = UserDefaults.standard.string(forKey: "kcString") { print("Found kcString \(str)") } else { print("No string for key kcString") }
但不能以相反的方式工作。
保存在 swift class 使用 :
UserDefaults.standard.set("hello", forKey: "kcString")
试图在 objc class 中检索使用:
self.val = [[NSUserDefaults standardUserDefaults] stringForKey:@"kcString"];
因为用户默认值与您的应用程序相关联,而不是与任何文件相关联。您可以使用任何类型的文件访问用户默认值,无论它是在 swift 还是 objective c 中。我假设您正在使用单一目标。请遵循概念。
我做了一个swift项目。 我添加了一个 objective c 文件。 我还添加了桥接头文件。 现在我将访问用户默认值:
在 .h 文件中将两种方法描述为:
@interface UDF_Objc_Access : NSObject
+(void)set_udf_value_objc:(NSString *)value for:(NSString*)key;
+(NSString *)get_udf_swift_value_for:(NSString*)key;
@end
在.m实现文件中定义为:
@implementation UDF_Objc_Access
+(void)set_udf_value_objc:(NSString *)value for:(NSString *)key {
[[NSUserDefaults standardUserDefaults] setObject:value forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
+(NSString *)get_udf_swift_value_for:(NSString *)key {
return [[NSUserDefaults standardUserDefaults] stringForKey:key];
}
@end
现在在你的 Appdelegate.swift 中做:
/*
key names
swift key = "swift_key"
objective c key = "objc_key"
*/
let swift_key = "swift_key"
let objc_key = "objc_key"
//MARK:- Case 1
/*
Save value from swift file & get it from objective c file
*/
UserDefaults.standard.set("This value is saved from swift class", forKey: swift_key)
UserDefaults.standard.synchronize()
//getting value from objective c class
print(UDF_Objc_Access.get_udf_swift_value_(for: swift_key))
/*
Set value from objective c file & get it with swift
*/
UDF_Objc_Access.set_udf_value_objc("This value is saved from objective c file", for: objc_key)
//print value form swift
print(UserDefaults.standard.value(forKey: objc_key)!)
注意:如果您使用多个目标,请使用应用组。