Files
Sourcery/docs/equatable.html
T
2025-09-17 15:43:31 +02:00

300 lines
15 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Equatable Reference</title>
<link rel="stylesheet" type="text/css" href="css/jazzy.css" />
<link rel="stylesheet" type="text/css" href="css/highlight.css" />
<meta charset='utf-8'>
<script src="js/jquery.min.js" defer></script>
<script src="js/jazzy.js" defer></script>
<script src="js/lunr.min.js" defer></script>
<script src="js/typeahead.jquery.js" defer></script>
<script src="js/jazzy.search.js" defer></script>
</head>
<body>
<a title="Equatable Reference"></a>
<header>
<div class="content-wrapper">
<p><a href="index.html">Sourcery 2.3.0 Docs</a> (100% documented)</p>
<p class="header-right"><a href="https://github.com/krzysztofzablocki/Sourcery"><img src="img/gh.png"/>View on GitHub</a></p>
<p class="header-right">
<form role="search" action="search.json">
<input type="text" placeholder="Search documentation" data-typeahead>
</form>
</p>
</div>
</header>
<div class="content-wrapper">
<p id="breadcrumbs">
<a href="index.html">Sourcery Reference</a>
<img id="carat" src="img/carat.png" />
Equatable Reference
</p>
</div>
<div class="content-wrapper">
<nav class="sidebar">
<ul class="nav-groups">
<li class="nav-group-name">
<a href="Guides.html">Guides</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="installing.html">Installing</a>
</li>
<li class="nav-group-task">
<a href="usage.html">Usage</a>
</li>
<li class="nav-group-task">
<a href="writing-templates.html">Writing templates</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Examples.html">Examples</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="equatable.html">Equatable</a>
</li>
<li class="nav-group-task">
<a href="hashable.html">Hashable</a>
</li>
<li class="nav-group-task">
<a href="enum-cases.html">Enum cases</a>
</li>
<li class="nav-group-task">
<a href="lenses.html">Lenses</a>
</li>
<li class="nav-group-task">
<a href="mocks.html">Mocks</a>
</li>
<li class="nav-group-task">
<a href="codable.html">Codable</a>
</li>
<li class="nav-group-task">
<a href="Protocols/Diffable.html">Diffable</a>
</li>
<li class="nav-group-task">
<a href="diffable.html">Diffable</a>
</li>
<li class="nav-group-task">
<a href="linuxmain.html">LinuxMain</a>
</li>
<li class="nav-group-task">
<a href="decorator.html">Decorator</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Types.html">Types</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Classes/Types.html">Types</a>
</li>
<li class="nav-group-task">
<a href="Classes/Type.html">Type</a>
</li>
<li class="nav-group-task">
<a href="Classes/Protocol.html">Protocol</a>
</li>
<li class="nav-group-task">
<a href="Classes/Class.html">Class</a>
</li>
<li class="nav-group-task">
<a href="Classes/Struct.html">Struct</a>
</li>
<li class="nav-group-task">
<a href="Classes/Enum.html">Enum</a>
</li>
<li class="nav-group-task">
<a href="Classes/EnumCase.html">EnumCase</a>
</li>
<li class="nav-group-task">
<a href="Classes/AssociatedValue.html">AssociatedValue</a>
</li>
<li class="nav-group-task">
<a href="Classes/AssociatedType.html">AssociatedType</a>
</li>
<li class="nav-group-task">
<a href="Classes/Variable.html">Variable</a>
</li>
<li class="nav-group-task">
<a href="Classes/Method.html">Method</a>
</li>
<li class="nav-group-task">
<a href="Classes/MethodParameter.html">MethodParameter</a>
</li>
<li class="nav-group-task">
<a href="Classes/Subscript.html">Subscript</a>
</li>
<li class="nav-group-task">
<a href="Classes/TypeName.html">TypeName</a>
</li>
<li class="nav-group-task">
<a href="Classes/TupleType.html">TupleType</a>
</li>
<li class="nav-group-task">
<a href="Classes/TupleElement.html">TupleElement</a>
</li>
<li class="nav-group-task">
<a href="Classes/ArrayType.html">ArrayType</a>
</li>
<li class="nav-group-task">
<a href="Classes/DictionaryType.html">DictionaryType</a>
</li>
<li class="nav-group-task">
<a href="Classes/ClosureType.html">ClosureType</a>
</li>
<li class="nav-group-task">
<a href="Classes/GenericType.html">GenericType</a>
</li>
<li class="nav-group-task">
<a href="Classes/GenericTypeParameter.html">GenericTypeParameter</a>
</li>
<li class="nav-group-task">
<a href="Classes/Attribute.html">Attribute</a>
</li>
<li class="nav-group-task">
<a href="Classes/ProtocolComposition.html">ProtocolComposition</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Other%20Classes.html">Other Classes</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Classes/Actor.html">Actor</a>
</li>
<li class="nav-group-task">
<a href="Classes/ClosureParameter.html">ClosureParameter</a>
</li>
<li class="nav-group-task">
<a href="Classes/DiffableResult.html">DiffableResult</a>
</li>
<li class="nav-group-task">
<a href="Classes/GenericParameter.html">GenericParameter</a>
</li>
<li class="nav-group-task">
<a href="Classes/GenericRequirement.html">GenericRequirement</a>
</li>
<li class="nav-group-task">
<a href="Classes/GenericRequirement/Relationship.html"> Relationship</a>
</li>
<li class="nav-group-task">
<a href="Classes/Import.html">Import</a>
</li>
<li class="nav-group-task">
<a href="Classes/Modifier.html">Modifier</a>
</li>
<li class="nav-group-task">
<a href="Classes/SetType.html">SetType</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Other%20Enums.html">Other Enumerations</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Enums/Composer.html">Composer</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Other%20Extensions.html">Other Extensions</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Extensions/Array.html">Array</a>
</li>
<li class="nav-group-task">
<a href="Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)BytesRange">BytesRange</a>
</li>
<li class="nav-group-task">
<a href="Other%20Extensions.html#/c:@M@SourceryRuntime@objc(cs)FileParserResult">FileParserResult</a>
</li>
<li class="nav-group-task">
<a href="Extensions/String.html">String</a>
</li>
<li class="nav-group-task">
<a href="Extensions/StringProtocol.html">StringProtocol</a>
</li>
<li class="nav-group-task">
<a href="Extensions/Typealias.html">Typealias</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Other%20Protocols.html">Other Protocols</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Protocols/Annotated.html">Annotated</a>
</li>
<li class="nav-group-task">
<a href="Protocols/Definition.html">Definition</a>
</li>
<li class="nav-group-task">
<a href="Protocols/Documented.html">Documented</a>
</li>
<li class="nav-group-task">
<a href="Protocols/Typed.html">Typed</a>
</li>
</ul>
</li>
<li class="nav-group-name">
<a href="Other%20Typealiases.html">Other Type Aliases</a>
<ul class="nav-group-tasks">
<li class="nav-group-task">
<a href="Other%20Typealiases.html#/s:15SourceryRuntime11Annotationsa">Annotations</a>
</li>
<li class="nav-group-task">
<a href="Other%20Typealiases.html#/s:15SourceryRuntime13Documentationa">Documentation</a>
</li>
<li class="nav-group-task">
<a href="Other%20Typealiases.html#/s:15SourceryRuntime0A8Modifiera">SourceryModifier</a>
</li>
</ul>
</li>
</ul>
</nav>
<article class="main-content">
<section>
<section class="section">
<h2 id='i-want-to-generate-code-equatable-code-implementation' class='heading'>I want to generate <code>Equatable</code> implementation</h2>
<p>Template used to generate equality for all types that either conform to the <code>AutoEquatable</code> protocol or are <a href="Writing%20templates.md#using-source-annotations">annotated</a> with <code>AutoEquatable</code> annotation, allowing us to avoid writing boilerplate code.</p>
<p>It adds <code>:Equatable</code> conformance to all types, except protocols (because it would require turning them into PAT&rsquo;s).
For protocols it&rsquo;s just generating <code>func ==</code>.</p>
<h3 id='a-href-https-github-com-krzysztofzablocki-sourcery-blob-master-templates-templates-autoequatable-stencil-stencil-template-a' class='heading'><a href="https://github.com/krzysztofzablocki/Sourcery/blob/master/Templates/Templates/AutoEquatable.stencil">Stencil template</a></h3>
<h4 id='available-variable-annotations' class='heading'>Available variable annotations:</h4>
<ul>
<li><code>skipEquality</code> allows you to skip variable from being compared.</li>
<li><code>arrayEquality</code> mark this to use array comparsion for variables that have array of items that don&rsquo;t implement <code>Equatable</code> but have <code>==</code> operator e.g. Protocols</li>
</ul>
<h4 id='example-output' class='heading'>Example output:</h4>
<pre class="highlight swift"><code><span class="c1">// MARK: - AdNodeViewModel AutoEquatable</span>
<span class="kd">extension</span> <span class="kt">AdNodeViewModel</span><span class="p">:</span> <span class="kt">Equatable</span> <span class="p">{}</span>
<span class="kd">internal</span> <span class="kd">func</span> <span class="o">==</span> <span class="p">(</span><span class="nv">lhs</span><span class="p">:</span> <span class="kt">AdNodeViewModel</span><span class="p">,</span> <span class="nv">rhs</span><span class="p">:</span> <span class="kt">AdNodeViewModel</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span> <span class="p">{</span>
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">remoteAdView</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">remoteAdView</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">hidesDisclaimer</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">hidesDisclaimer</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">type</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">height</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">height</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
<span class="k">guard</span> <span class="n">lhs</span><span class="o">.</span><span class="n">attributedDisclaimer</span> <span class="o">==</span> <span class="n">rhs</span><span class="o">.</span><span class="n">attributedDisclaimer</span> <span class="k">else</span> <span class="p">{</span> <span class="k">return</span> <span class="kc">false</span> <span class="p">}</span>
<span class="k">return</span> <span class="kc">true</span>
<span class="p">}</span>
</code></pre>
</section>
</section>
<section id="footer">
<p>Copyright © 2016-2021 Pixle. All rights reserved.</p>
<p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="noopener" rel="external">jazzy ♪♫ v0.14.0</a>, a <a class="link" href="https://realm.io" target="_blank" rel="noopener" rel="external">Realm</a> project.</p>
</section>
</article>
</div>
</body>
</html>