Why am I allowed to set a read only property of a protocol using a struct that inherits said protocol?

swift protocol extension
swift protocol example
swift delegate protocol example
swift protocol default implementation
'optional' can only be applied to members of an @objc protocol
swift protocol vs interface
protocol in swift 4 stack overflow
swift protocol optional property

I'm following a tutorial on the protocol oriented programming paradigm in which I'm confused by something I thought was rather simple which is read only properties of protocols or getters and setters. My understanding is that a read only property is signified by using the keyword 'get' when declaring a variable within a protocol. I was excited so I quickly coded created a playground to see if my thinking was accurate however it appears that I can still change the property which I thought was read only. What am I doing wrong to make it a true read only property to where I can't set it?

protocol FullName {
    var firstName: String {get set}
    var lastName: String {get set}
    var readOnlyProperty: String {get}

}

struct OuttaBeerOuttaHere: FullName {
    var firstName: String

    var lastName: String

    var readOnlyProperty: String = "Jack! Jack!...Line from Titanic"

}

var leonardoDicaprio = OuttaBeerOuttaHere.init(firstName: "Leonardo", lastName: "Dicaprio", readOnlyProperty: "WTF")

print(leonardoDicaprio.readOnlyProperty) //prints "WTF"

leonardoDicaprio.readOnlyProperty = "what now"

print(leonardoDicaprio.readOnlyProperty) //prints "what now"

Protocols, The protocol can then be adopted by a class, structure, or enumeration to provide Any type that satisfies the requirements of a protocol is said to conform to that protocol. If the protocol only requires a property to be gettable, the requirement can be You can use a protocol in many places where other types are allowed,​  let's just make it a standalone protocol, and here will also have a not so pretty. 7:23. Now, prettyPrintable can inherit from Printable and notSoPrettyPrintable. 7:29. In this way, we can build up protocols to create a larger set of requirements. 7:34. Again, unlike classes which can only inherit from a single base class, 7:38

Your protocol doesn't declare readOnlyProperty as a read-only property. It only requires that implementations of that protocol have at least gettable readOnlyProperty property. To allow mutations of that property or not is up to implementation itself.

Protocol in Swift with Practical Examples - Agoi Abel, The protocol can then be adopted by a class, structure, or… A gettable property is a property we can only read from after we have given it an initial value. The only requirement of VoiceAssistant is to provide a name, and all conforming types are free to provide it using a let or a var. Below is an example of get set property requirement in a protocol.

From Docs

Here’s an example of a protocol with a single instance property requirement:

protocol FullyNamed {
    var fullName: String { get }
}

The FullyNamed protocol requires a conforming type to provide a fully-qualified name. The protocol doesn’t specify anything else about the nature of the conforming type—it only specifies that the type must be able to provide a full name for itself. The protocol states that any FullyNamed type must have a gettable instance property called fullName, which is of type String

it's a requirement from the protocol not a define

All about protocols in swift - Abhimuralidharan, The protocol can then be adopted by a class, structure, or… Jul 29, 2017 · 11 min read Any type that satisfies the requirements of a protocol is said to conform to that A protocol declaration only specifies the required property name and type. But it doesn't allow us to add Class name along with the protocols using  Requests are processed only if one of the protocol rules specifically allows the client to communicate using that specific protocol. A site and content rule must also specifically allow access to the requested object.

Representing Any Object in Swift Using Protocol Extensions, Representing Any Object in Swift Using Protocol Extensions NSObject to write a function that would be accessible to all classes inheriting from I can write a protocol say, Presentable that defines a read-only property called For example, if you have a Person struct, set it to conform to AboutHelpLegal. “Permit me to adopt the protocol that has already been established”; or “I adopt the protocol already established” At the beginning of 2011, I resolved to refrain from using expletives but by early July reneged on my promise every time I heard someone approach the podium and say “Good day!

Protocol-oriented Programming in Swift, In earlier versions of Swift, it was possible to only extend classes, structures, and be fulfilled by a constant stored property or a read-only computed property. a protocol, it is important to indicate if the function will change the contents with the Below, for example, is a struct Container that conforms to our Queue protocol. The Secure Electronic Transaction protocol also know as SET is a method for providing secure credit card transactions on the Internet. The SET protocol is designed to operate both in real time, as on the World Wide Web, and in a store-and-forward environment, such as e-mail.

Chapter 15 Protocols, Any class, structure or enumeration can conform to a protocol by Any type that implements the functionality specified in a protocol is said to conform to the protocol. get and set whereas limbs can be read only (only get is required). Optional properties and methods can be declared using the optional  If set to No, configure each IP address separately using the properties dialog box for each IP address. If set to Yes, the settings of the IPAll properties box will apply to all IP addresses. Default value is Yes. No Delay SQL Serverdoes not implement changes to this property. See Also. Choosing a Network Protocol

Comments
  • FYI - your struct does not "inherit" the protocol. It "conforms to" the protocol.