From c29ec64d94a0dc908e630fbe751cd5ed3d1699d9 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Mon, 4 Nov 2019 15:58:49 -0800 Subject: [PATCH] Implement RCTConvertOptionalVecToArray(const folly::Optional &vec) Summary: There are two implementations of `RCTConvertVecToArray`. The first implementation: ``` template 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 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 NSArray *RCTConvertOptionalVecToArray(const folly::Optional &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 --- Libraries/TypeSafety/RCTConvertHelpers.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Libraries/TypeSafety/RCTConvertHelpers.h b/Libraries/TypeSafety/RCTConvertHelpers.h index 0df1bc85bd1..1b6bf9341e7 100644 --- a/Libraries/TypeSafety/RCTConvertHelpers.h +++ b/Libraries/TypeSafety/RCTConvertHelpers.h @@ -40,6 +40,12 @@ NSArray *RCTConvertOptionalVecToArray(const folly::Optional &vec, id return vec.hasValue() ? RCTConvertVecToArray(vec.value(), convertor) : nil; } +template +NSArray *RCTConvertOptionalVecToArray(const folly::Optional &vec) +{ + return vec.hasValue() ? RCTConvertVecToArray(vec.value(), ^id(typename ContainerT::value_type element) { return element; }) : nil; +} + bool RCTBridgingToBool(id value); folly::Optional RCTBridgingToOptionalBool(id value); NSString *RCTBridgingToString(id value);