<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">I personally prefer using value type.</span></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69); min-height: 19.1px;"><span style="font-family: '.SFUIText'; font-size: 16pt;"></span><br></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">First of all only because the request is value type does not mean the underlying members has to be value type.&nbsp;By using getter and setter we can easily provide consistent experience.</span></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69); min-height: 19.1px;"><span style="font-family: '.SFUIText'; font-size: 16pt;"></span><br></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">Comparing reference type and value type, value types offer the following benefits:</span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;"><br></span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">1. More flexible:</span></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">When the payload of the request carries is extremely small, there's no reason we should allocate the payload in the heap (and small blocks are also harder to reuse). If we use value type for request, we can make the internal storage abstract by using protocol and only allocate in heap when we need to.</span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;"><br></span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">2. More secure:</span></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">Value type destroys when it go out of scope, which is not as likely to suffer from memory leak. Therefore more user friendly.&nbsp;</span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;"><br></span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">3. Can be use as template:</span></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">value type: copy the template struct to the stack, modify a few members, good to go, automatically destroy after.</span></p>
<p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">Reference type: allocate a new class in heap, call constructor, free memory from heap after.</span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;"><br></span></p><p style="margin: 0px; line-height: normal; font-family: '.SF UI Text'; color: rgb(69, 69, 69);"><span style="font-family: '.SFUIText'; font-size: 16pt;">4.Match the Swift standard library.</span></p></body></html>