<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh" -->

---
title: How to declare a memberwise initializer in a Swift extension
description: SE-0546, a Swift Evolution proposal under review from August 22 through September 4, 2026, would allow a struct&#x27;s memberwise initializer to be declared in a...
canonical: https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: How to declare a memberwise initializer in a Swift extension | daily.dev
og:description: SE-0546, a Swift Evolution proposal under review from August 22 through September 4, 2026, would allow a struct&#x27;s memberwise initializer to be declared in a...
og:url: https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh
og:image: https://api.daily.dev/og/posts/lZ7tn36hH.png
og:image:alt: How to declare a memberwise initializer in a Swift extension
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# How to declare a memberwise initializer in a Swift extension

**[Sarunw](https://daily.dev/sources/sarunw)** · [@sarunw](https://daily.dev/sarunw) · 5 min read · 0 upvotes · 0 comments

## Summary

SE-0546, a Swift Evolution proposal under review from August 22 through September 4, 2026, would allow a struct's memberwise initializer to be declared in a same-file, unconstrained extension instead of only inside the struct body. Today, a handwritten initializer matching the synthesized signature in an extension is treated as a redeclaration error. Under the proposal, a matching initializer (in labels, types, and order) in a same-file, unconstrained extension would suppress the synthesized one, letting developers raise its access level to public or customize it while keeping stored properties in the main declaration. The proposal covers special cases: failable/throwing initializers suppress the synthesized one, async initializers don't (since Swift can overload on async), constrained extensions don't suppress it, and default parameter values don't affect suppression. This is especially useful for macro-generated public structs, whose synthesized initializers are currently stuck at internal access.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://sarunw.com/posts/same-file-memberwise-initializer-extensions>

## Questions this post answers

### What does Swift Evolution proposal SE-0546 change about memberwise initializers?

SE-0546 proposes letting developers declare a struct's memberwise initializer in a same-file, unconstrained extension instead of only inside the struct body. If the initializer's argument labels, types, and order exactly match the synthesized one, it suppresses the synthesized initializer, letting developers raise its access level to public. The proposal was under review from August 22 through September 4, 2026, so details may still change.

_daily.dev helps swift developers track proposals like this before they land in a stable release._

### Why can't I make a struct's synthesized memberwise initializer public in Swift today?

Swift's synthesized memberwise initializer for a struct can never have an access level higher than internal, so exposing it as public requires writing the initializer manually, and currently that has to happen inside the struct declaration itself rather than in an extension, since a matching initializer in an extension is treated as an illegal redeclaration.

_track swift language changes like initializer access rules to plan public api design ahead of time on daily.dev._

### Why would a matching initializer in a Swift extension not suppress the synthesized memberwise initializer?

Suppression only happens under specific conditions: the extension must be unconstrained and in the same file as the struct, and the initializer's parameters must exactly match the synthesized one in argument labels, types, and order. Constrained extensions never suppress it, async initializers don't suppress it because Swift overloads on async, and reordered arguments create a separate initializer rather than replacing the synthesized one.

_developers weighing swift extension patterns can follow proposal details like these on daily.dev._

## Similar posts on daily.dev

- [Memberwise Initializer in Swift explained with Code Examples](https://daily.dev/posts/memberwise-initializer-in-swift-explained-with-code-examples-oywf9uwcf) · SwiftLee · 1 upvotes · 0 comments
- [Private properties no longer break the memberwise initializer in Swift 6.4](https://daily.dev/posts/private-properties-no-longer-break-the-memberwise-initializer-in-swift-6-4-5ekefyofb) · Sarunw · 0 upvotes · 0 comments
- [Swift with Majid](https://daily.dev/posts/swift-with-majid-zyqopz3no) · Swift with Majid · 0 upvotes · 0 comments
- [Swift Concurrency is Gaining Broader Adoption -- Fatbobman's Swift Weekly \#133](https://daily.dev/posts/swift-concurrency-is-gaining-broader-adoption----fatbobman-s-swift-weekly-133-40hcoackj) · Fatbobman · 0 upvotes · 0 comments

---

Tags: [#swift](https://daily.dev/tags/swift)

[View this post on daily.dev](https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"How to declare a memberwise initializer in a Swift extension","url":"https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh"},"datePublished":"2026-08-25T07:42:19.970Z","dateModified":"2026-08-26T04:00:11.598Z","description":"SE-0546, a Swift Evolution proposal under review from August 22 through September 4, 2026, would allow a struct's memberwise initializer to be declared in a...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/560e968cf5ba730cc517da5d6b89587b?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/560e968cf5ba730cc517da5d6b89587b?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Sarunw","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Person","name":"Sarun Wongpatcharapakorn","url":"https://daily.dev/sarunw","image":"https://avatars.githubusercontent.com/u/795368?v=4","interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":20}},"commentCount":0,"discussionUrl":"https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"swift","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Sarunw","item":"https://daily.dev/sources/sarunw"},{"@type":"ListItem","position":3,"name":"How to declare a memberwise initializer in a Swift extension"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/how-to-declare-a-memberwise-initializer-in-a-swift-extension-lz7tn36hh#faq","mainEntity":[{"@type":"Question","name":"What does Swift Evolution proposal SE-0546 change about memberwise initializers?","acceptedAnswer":{"@type":"Answer","text":"SE-0546 proposes letting developers declare a struct's memberwise initializer in a same-file, unconstrained extension instead of only inside the struct body. If the initializer's argument labels, types, and order exactly match the synthesized one, it suppresses the synthesized initializer, letting developers raise its access level to public. The proposal was under review from August 22 through September 4, 2026, so details may still change. daily.dev helps swift developers track proposals like this before they land in a stable release."}},{"@type":"Question","name":"Why can't I make a struct's synthesized memberwise initializer public in Swift today?","acceptedAnswer":{"@type":"Answer","text":"Swift's synthesized memberwise initializer for a struct can never have an access level higher than internal, so exposing it as public requires writing the initializer manually, and currently that has to happen inside the struct declaration itself rather than in an extension, since a matching initializer in an extension is treated as an illegal redeclaration. track swift language changes like initializer access rules to plan public api design ahead of time on daily.dev."}},{"@type":"Question","name":"Why would a matching initializer in a Swift extension not suppress the synthesized memberwise initializer?","acceptedAnswer":{"@type":"Answer","text":"Suppression only happens under specific conditions: the extension must be unconstrained and in the same file as the struct, and the initializer's parameters must exactly match the synthesized one in argument labels, types, and order. Constrained extensions never suppress it, async initializers don't suppress it because Swift overloads on async, and reordered arguments create a separate initializer rather than replacing the synthesized one. developers weighing swift extension patterns can follow proposal details like these on daily.dev."}}]}
```

