mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
c29ec64d94
Summary:
There are two implementations of `RCTConvertVecToArray`. The first implementation:
```
template<typename ContainerT>
NSArray *RCTConvertVecToArray(const ContainerT &vec, id (^convertor)(typename ContainerT::value_type element))
{
NSMutableArray *array = [NSMutableArray new];
for (size_t i = 0, size = vec.size(); i < size; ++i) {
id object = convertor(vec[i]);
array[i] = object ?: (id)kCFNull;
}
return array;
}
```
The purpose of the second implementation is to default the convertor function to the identify function:
```
template<typename ContainerT>
NSArray *RCTConvertVecToArray(const ContainerT &vec)
{
return RCTConvertVecToArray(vec, ^id(typename ContainerT::value_type element) { return element; });
}
```
Meanwhile, there's only one implementation of `RCTConvertOptionalVecToArray`:
```
template<typename ContainerT>
NSArray *RCTConvertOptionalVecToArray(const folly::Optional<ContainerT> &vec, id (^convertor)(typename ContainerT::value_type element))
{
return vec.hasValue() ? RCTConvertVecToArray(vec.value(), convertor) : nil;
}
```
In this diff, I overload `RCTConvertOptionalVecToArray` to default the convertor to the identify function.
Changelog:
[iOS][Added] - Added RCTConvertOptionalVecToArray with default converter
Reviewed By: PeteTheHeat
Differential Revision: D18148891
fbshipit-source-id: d7d5f05cda06c9fa5374334ec4e9dbbd8b6d2eba
74 lines
2.3 KiB
Objective-C
74 lines
2.3 KiB
Objective-C
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
#import <vector>
|
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#import <FBLazyVector/FBLazyVector.h>
|
|
#import <folly/Optional.h>
|
|
|
|
namespace facebook {
|
|
namespace react {
|
|
template<typename T>
|
|
using LazyVector = FB::LazyVector<T, id>;
|
|
}}
|
|
|
|
template<typename ContainerT>
|
|
NSArray *RCTConvertVecToArray(const ContainerT &vec, id (^convertor)(typename ContainerT::value_type element))
|
|
{
|
|
NSMutableArray *array = [NSMutableArray new];
|
|
for (size_t i = 0, size = vec.size(); i < size; ++i) {
|
|
id object = convertor(vec[i]);
|
|
array[i] = object ?: (id)kCFNull;
|
|
}
|
|
return array;
|
|
}
|
|
template<typename ContainerT>
|
|
NSArray *RCTConvertVecToArray(const ContainerT &vec)
|
|
{
|
|
return RCTConvertVecToArray(vec, ^id(typename ContainerT::value_type element) { return element; });
|
|
}
|
|
|
|
template<typename ContainerT>
|
|
NSArray *RCTConvertOptionalVecToArray(const folly::Optional<ContainerT> &vec, id (^convertor)(typename ContainerT::value_type element))
|
|
{
|
|
return vec.hasValue() ? RCTConvertVecToArray(vec.value(), convertor) : nil;
|
|
}
|
|
|
|
template<typename ContainerT>
|
|
NSArray *RCTConvertOptionalVecToArray(const folly::Optional<ContainerT> &vec)
|
|
{
|
|
return vec.hasValue() ? RCTConvertVecToArray(vec.value(), ^id(typename ContainerT::value_type element) { return element; }) : nil;
|
|
}
|
|
|
|
bool RCTBridgingToBool(id value);
|
|
folly::Optional<bool> RCTBridgingToOptionalBool(id value);
|
|
NSString *RCTBridgingToString(id value);
|
|
folly::Optional<double> RCTBridgingToOptionalDouble(id value);
|
|
double RCTBridgingToDouble(id value);
|
|
NSArray *RCTBridgingToArray(id value);
|
|
|
|
template<typename T>
|
|
facebook::react::LazyVector<T> RCTBridgingToVec(id value, T (^ctor)(id element))
|
|
{
|
|
NSArray *array = RCTBridgingToArray(value);
|
|
typedef typename facebook::react::LazyVector<T>::size_type _size_t;
|
|
_size_t size = static_cast<_size_t>(array.count);
|
|
return facebook::react::LazyVector<T>::fromUnsafeRawValue(array, size, ctor);
|
|
}
|
|
|
|
template<typename T>
|
|
folly::Optional<facebook::react::LazyVector<T>> RCTBridgingToOptionalVec(id value, T (^ctor)(id element))
|
|
{
|
|
if (value == nil || value == (id)kCFNull) {
|
|
return folly::none;
|
|
} else {
|
|
return RCTBridgingToVec(value, ctor);
|
|
}
|
|
}
|