如何从Swift类中的ObjectiveC类中检索Userdefault?

时间:2018-08-01 07:32:19

标签: ios swift string nsuserdefaults

我已将userdefault字符串值保存在swift类中,以及如何在Objective C类中检索该值?我曾经用过https://stackoverflow.com/questions/44171504/userdefaults-between-objective-c-and-swift,它可以从Objc迅速运行,但反之则不行。

示例代码

  • 保存在ObjC类中

    [[NSUserDefaults standardUserDefaults] setObject:@"HELLO" forKey:@"kcString"];
    
  • 在Swift类中使用

    检索
    if let str = UserDefaults.standard.string(forKey: "kcString") {
        print("Found kcString \(str)")
    } else {
        print("No string for key kcString")
    }
    

但不能反向工作。

  • 使用以下命令保存在swift类中:

    UserDefaults.standard.set("hello", forKey: "kcString")
    
  • 试图使用以下方法在objc类中进行检索:

    self.val = [[NSUserDefaults standardUserDefaults] stringForKey:@"kcString"];
    

1 个答案:

答案 0 :(得分:0)

由于用户默认设置与您的应用程序相关联,而不与任何文件相关联。您可以使用任何类型的文件(无论是快速文件还是目标c文件)访问用户默认值。我假设您正在使用单个目标。请遵循这个概念。

我做了一个快速的项目。 我添加了一个客观的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)!)

注意:如果要使用多个目标,请使用应用程序组。