A protocol names behavior or data that conforming types must provide.

Conform to a shape

studentName
protocol_basics.swift
Replay: real traced execution (multi-file project)
protocol Named {
    var name: String { get }
}

struct Student: Named {
    let name: String
}

let studentName = "Mina"
let student = Student(name: studentName)
let label = "student=\(student.name)"

print(label)
protocol Named {
    var name: String { get }
}

struct Student: Named {
    let name: String
}

let studentName = "Kai"
let student = Student(name: studentName)
let label = "student=\(student.name)"

print(label)
protocol Named {
    var name: String { get }
}

struct Student: Named {
    let name: String
}

let studentName = "Ari"
let student = Student(name: studentName)
let label = "student=\(student.name)"

print(label)
  1. studentName ← Mina, student ← Student(name: "Mina"), label ← student=Mina

    9let studentName→ Mina = "Mina"  //@studentName="Kai", "Ari"10let student→ Student(name: "Mina") = Student(name: studentNameMina)11let label→ student=Mina = "student=\(student.nameMina)"1213print(labelstudent=Mina)
    outputstudent=Mina
  1. studentName ← Kai, student ← Student(name: "Kai"), label ← student=Kai

    9let studentName→ Kai = "Kai"10let student→ Student(name: "Kai") = Student(name: studentNameKai)11let label→ student=Kai = "student=\(student.nameKai)"1213print(labelstudent=Kai)
    outputstudent=Kai
  1. studentName ← Ari, student ← Student(name: "Ari"), label ← student=Ari

    9let studentName→ Ari = "Ari"10let student→ Student(name: "Ari") = Student(name: studentNameAri)11let label→ student=Ari = "student=\(student.nameAri)"1213print(labelstudent=Ari)
    outputstudent=Ari
protocol A type conforms to a protocol by providing the required members.