#ios #swift #react-native
#iOS #swift #react-native
Вопрос:
Я создал один проект в iOS swift и создал несколько экранов в swift, теперь я хочу использовать эти экраны в react native, поэтому мне нужно получить доступ к swift NSUserDefault в react native для постоянного сеанса, поэтому, как я могу его использовать, пожалуйста, помогите мне.
Спасибо.
Ответ №1:
Самый простой способ — просто создать небольшой собственный модуль в objc (поскольку ReactNative SDK — это код objc) в вашем проекте XCode, добавив следующие файлы:
RNUserDefaults.h:
#import <React/RCTBridgeModule.h>
@interface RNUserDefaults : NSObject <RCTBridgeModule>
@end
RNUserDefaults.m:
#import "RNUserDefaults.h"
@implementation RNUserDefaults
RCT_EXPORT_MODULE(UserDefaults)
RCT_EXPORT_METHOD(set:(NSString*)key value:(id)value) {
[NSUserDefaults.standardUserDefaults setObject:value forKey:key];
}
RCT_EXPORT_METHOD(get:(NSString*)key callback:(RCTResponseSenderBlock)callback) {
id value = [NSUserDefaults.standardUserDefaults objectForKey:key];
callback(@[value]);
}
@end
Гораздо сложнее реализовать собственный модуль в Swift, потому что вы также должны добавить файлы .h и .m для переназначения ( RCT_EXTERN_REMAP_MODULE
) в swift с внешними объявлениями ( RCT_EXTERN_METHOD
).
Как использовать:
import {
...
NativeModules,
} from 'react-native';
...
NativeModules.UserDefaults.set('userId', 1234);
NativeModules.UserDefaults.get('userId', value => {
alert(value); // Shows 1234
});
Ответ №2:
Вы можете хранить данные в постоянном хранилище, подобном этому.
Вот пример фрагмента.
AsyncStorage.setItem('loggedIn', true);
И в вашем app.js вы можете проверить этот флаг в конструкторе
AsyncStorage.getItem('loggedIn').then((value) => {
if (value) {
//user logged in logic goes here
} else {
// user logged out. You need to login him again
}
});
Комментарии:
1. я уже установил заголовок в iOS swift, используя NSUserDefault, но я хочу получить доступ к этому сохраненному значению NSUserDefault в React native.
2. попробуйте
AsyncStorage.getItem
это3. это дает мне Null
Ответ №3:
Вы можете напрямую использовать настройки из react-native, это оболочка поверх NSUserDefaults
подробнее здесь
если вы получаете значение null при извлечении значения, которое вы установили на родной стороне iOS, необходимо проверить, поддерживается ли его возвращаемый тип мостом react-native, если вы попытаетесь отправить обратно тип данных, подобный NSDate
, он выдаст вам null, поэтому проверьте список, если вам нужно какое-либо приведение к типу здесь