@@ -1056,177 +1056,3 @@ + (NSPropertyList)NSPropertyList:(id)json
10561056}), RCTAnimationTypeEaseInEaseOut, integerValue)
10571057
10581058@end
1059-
1060- BOOL RCTSetProperty (id target, NSString *keyPath, SEL type, id json)
1061- {
1062- // Split keypath
1063- NSArray *parts = [keyPath componentsSeparatedByString: @" ." ];
1064- NSString *key = [parts lastObject ];
1065- for (NSUInteger i = 0 ; i < parts.count - 1 ; i++) {
1066- target = [target valueForKey: parts[i]];
1067- if (!target) {
1068- return NO ;
1069- }
1070- }
1071-
1072- // Get property setter
1073- SEL setter = NSSelectorFromString ([NSString stringWithFormat: @" set%@%@ :" ,
1074- [[key substringToIndex: 1 ] uppercaseString ],
1075- [key substringFromIndex: 1 ]]);
1076-
1077- // Fail early
1078- if (![target respondsToSelector: setter]) {
1079- return NO ;
1080- }
1081-
1082- @try {
1083-
1084- NSMethodSignature *signature = [RCTConvert methodSignatureForSelector: type];
1085- switch (signature.methodReturnType [0 ]) {
1086-
1087- #define RCT_SET_CASE (_value, _type ) \
1088- case _value: { \
1089- _type (*convert)(id , SEL , id ) = (typeof (convert))objc_msgSend; \
1090- void (*set)(id , SEL , _type) = (typeof (set))objc_msgSend; \
1091- set (target, setter, convert ([RCTConvert class ], type, json)); \
1092- break ; \
1093- }
1094-
1095- RCT_SET_CASE (' :' , SEL )
1096- RCT_SET_CASE (' *' , const char *)
1097- RCT_SET_CASE (' c' , char )
1098- RCT_SET_CASE (' C' , unsigned char )
1099- RCT_SET_CASE (' s' , short )
1100- RCT_SET_CASE (' S' , unsigned short )
1101- RCT_SET_CASE (' i' , int )
1102- RCT_SET_CASE (' I' , unsigned int )
1103- RCT_SET_CASE (' l' , long )
1104- RCT_SET_CASE (' L' , unsigned long )
1105- RCT_SET_CASE (' q' , long long )
1106- RCT_SET_CASE (' Q' , unsigned long long )
1107- RCT_SET_CASE (' f' , float )
1108- RCT_SET_CASE (' d' , double )
1109- RCT_SET_CASE (' B' , BOOL )
1110- RCT_SET_CASE (' ^' , void *)
1111-
1112- case ' @' : {
1113- id (*convert)(id , SEL , id ) = (typeof (convert))objc_msgSend;
1114- void (*set)(id , SEL , id ) = (typeof (set))objc_msgSend;
1115- set (target, setter, convert ([RCTConvert class ], type, json));
1116- break ;
1117- }
1118- case ' {' :
1119- default : {
1120-
1121- // Get converted value
1122- void *value = malloc (signature.methodReturnLength );
1123- NSInvocation *invocation = [NSInvocation invocationWithMethodSignature: signature];
1124- [invocation setTarget: [RCTConvert class ]];
1125- [invocation setSelector: type];
1126- [invocation setArgument: &json atIndex: 2 ];
1127- [invocation invoke ];
1128- [invocation getReturnValue: value];
1129-
1130- // Set converted value
1131- signature = [target methodSignatureForSelector: setter];
1132- invocation = [NSInvocation invocationWithMethodSignature: signature];
1133- [invocation setArgument: &setter atIndex: 1 ];
1134- [invocation setArgument: value atIndex: 2 ];
1135- [invocation invokeWithTarget: target];
1136- free (value);
1137-
1138- break ;
1139- }
1140- }
1141- return YES ;
1142- }
1143- @catch (NSException *exception) {
1144- RCTLogError (@" Exception thrown while attempting to set property '%@ ' of \
1145- '%@ ' with value '%@ ': %@ " , key, [target class ], json, exception);
1146- return NO ;
1147- }
1148- }
1149-
1150- BOOL RCTCopyProperty (id target, id source, NSString *keyPath)
1151- {
1152- // Split keypath
1153- NSArray *parts = [keyPath componentsSeparatedByString: @" ." ];
1154- NSString *key = [parts lastObject ];
1155- for (NSUInteger i = 0 ; i < parts.count - 1 ; i++) {
1156- source = [source valueForKey: parts[i]];
1157- target = [target valueForKey: parts[i]];
1158- if (!source || !target) {
1159- return NO ;
1160- }
1161- }
1162-
1163- // Get property getter
1164- SEL getter = NSSelectorFromString (key);
1165-
1166- // Get property setter
1167- SEL setter = NSSelectorFromString ([NSString stringWithFormat: @" set%@%@ :" ,
1168- [[key substringToIndex: 1 ] uppercaseString ],
1169- [key substringFromIndex: 1 ]]);
1170-
1171- // Fail early
1172- if (![source respondsToSelector: getter] || ![target respondsToSelector: setter]) {
1173- return NO ;
1174- }
1175-
1176- NSMethodSignature *signature = [source methodSignatureForSelector: getter];
1177- switch (signature.methodReturnType [0 ]) {
1178-
1179- #define RCT_COPY_CASE (_value, _type ) \
1180- case _value: { \
1181- _type (*get)(id , SEL ) = (typeof (get))objc_msgSend; \
1182- void (*set)(id , SEL , _type) = (typeof (set))objc_msgSend; \
1183- set (target, setter, get (source, getter)); \
1184- break ; \
1185- }
1186-
1187- RCT_COPY_CASE (' :' , SEL )
1188- RCT_COPY_CASE (' *' , const char *)
1189- RCT_COPY_CASE (' c' , char )
1190- RCT_COPY_CASE (' C' , unsigned char )
1191- RCT_COPY_CASE (' s' , short )
1192- RCT_COPY_CASE (' S' , unsigned short )
1193- RCT_COPY_CASE (' i' , int )
1194- RCT_COPY_CASE (' I' , unsigned int )
1195- RCT_COPY_CASE (' l' , long )
1196- RCT_COPY_CASE (' L' , unsigned long )
1197- RCT_COPY_CASE (' q' , long long )
1198- RCT_COPY_CASE (' Q' , unsigned long long )
1199- RCT_COPY_CASE (' f' , float )
1200- RCT_COPY_CASE (' d' , double )
1201- RCT_COPY_CASE (' B' , BOOL )
1202- RCT_COPY_CASE (' ^' , void *)
1203-
1204- case ' @' : {
1205- id (*get)(id , SEL ) = (typeof (get))objc_msgSend;
1206- void (*set)(id , SEL , id ) = (typeof (set))objc_msgSend;
1207- set (target, setter, get (source, getter));
1208- break ;
1209- }
1210- case ' {' :
1211- default : {
1212-
1213- // Get value
1214- void *value = malloc (signature.methodReturnLength );
1215- NSInvocation *invocation = [NSInvocation invocationWithMethodSignature: signature];
1216- [invocation setArgument: &getter atIndex: 1 ];
1217- [invocation invokeWithTarget: source];
1218- [invocation getReturnValue: value];
1219-
1220- // Set value
1221- signature = [target methodSignatureForSelector: setter];
1222- invocation = [NSInvocation invocationWithMethodSignature: signature];
1223- [invocation setArgument: &setter atIndex: 1 ];
1224- [invocation setArgument: value atIndex: 2 ];
1225- [invocation invokeWithTarget: target];
1226- free (value);
1227-
1228- break ;
1229- }
1230- }
1231- return YES ;
1232- }
0 commit comments