Swiftλ νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ°
2015λ νλ‘ν μ½ Extensionμ΄ λμ λ Swift 2.0 λ²μ μ΄ λ°νλλ©° Appleμ Swiftκ° νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ°μ΄λΌ μ μΈνλ€. λν΄ νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ°μ μ°Έμ‘° νμ μΈ ν΄λμ€μ μΈμ€ν΄μ€λ³΄λ€ κ° νμ μ λ ν¨μ¨μ μΌλ‘ μ¬μ©νλ©°, μ€λ₯λ₯Ό μ€μΌ λ°©μμ΄λΌ μκ°νλ€.
μ΄μ μ€μννΈμμλ ν΄λμ€μμ νλ κ²μ²λΌ ꡬ쑰체μ μ΄κ±°νμ μΊ‘μν, μΆμν, μ κ·Ό μ μ΄ λ±μ κΈ°λ₯μ ꡬνν μ μμΌλ©°, μ°Έμ‘° νμ μ μ°Έμ‘° λ¬Έμ μμ λ μμ λ‘μΈ μ μκ³ λ€μ€μμκ³Ό λ λμ μΆμν λ©μ»€λμ¦μ ꡬν μ μκ² λμλ€.
νλ‘ν μ½
νλ‘ν μ½μ΄λ νΉμ μμ μ λ§λ λ©μλμ νλ‘νΌν°λ₯Ό μ μνλ μ²μ¬μ§μ΄λ€. ν΄λμ€λ ν΄λμ€λ§ μμν μ μλ κ²κ³Ό λ€λ₯΄κ², νλ‘ν μ½μ ν΄λμ€, ꡬ쑰체, μ΄κ±°νμ΄ μμν μ μλ€. Array, Int, Double λ± μ€μννΈμ κΈ°λ³Έ μλ£νμ ꡬ쑰체μ΄κΈ° λλ¬Έμ λλ€λ₯Έ ꡬ쑰체λ₯Ό μμνκ±°λ μμ λ°μ μ μλ€. κ·Έλμ ν΄λμ€μ²λΌ 곡ν΅λ ꡬ쑰λ₯Ό κ°μ§ μ μλ€κ³ μκ°ν μ μμ§λ§, ꡬ쑰체λ νλ‘ν μ½μ μμνλ©° μ΄λ₯Ό ꡬνν΄λΈλ€.
νλ‘ν μ½μ μλ‘λ Swiftμ Identifiableμ΄ μλ€
// idλ‘ λΉκ΅κ° νμν κ²½μ° μμνμ¬ μ¬μ©ν μ μλ€
// μ) νμμ¦ idλ₯Ό ν΅ν΄ νμ ꡬλΆ
public protocol Identifiable<ID> {
/// A type representing the stable identity of the entity associated with
/// an instance.
associatedtype ID : Hashable
/// The stable identity of the entity associated with this instance.
var id: Self.ID { get }
}
νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ°
νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ°μ μ΄λ¬ν νλ‘ν μ½ ννλ₯Ό μ κ·Ή μ¬μ©νλ κ²μ΄λ€. μ νλ‘ν μ½μ μ μμ 'νΉμ 'μ΄λΌλ λ¨μ΄μ μ£Όλͺ©νλ©° μ μ΄ν΄κ° λλ€. μλ₯Ό λ€μ΄ μ¬λμ μ΄λ¦κ³Ό κ±°μ£Όμ§κ° μλ€. Nameμ μ΄λ¦λ§μ μν μμ μ΄κ³ , Homeμ κ±°μ£Όμ§λ§μ μν μμ μ΄λ€. μ΄λ κ² μμ λ³λ‘ ꡬλΆνκ³ νλλ‘ λͺ¨μ μμ±νλ νλ‘κ·Έλλ°μ νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ°μ΄λΌ νλ€.
iOS κ°λ°μ νλ€λ³΄λ©΄ λͺ¨λν λΌλ λ§μ μ λ§ λ§μ΄ λ£κ² λλ€. λͺ¨λμ νΉμ κΈ°λ₯μ νλλ‘ λ¬Άμ λ 립μ μΈ λ¨μλ‘, μ΄λ¬ν λͺ¨λμ΄ λͺ¨μ¬ νλμ νλ‘κ·Έλ¨μ ꡬμ±νλ€. Swiftλ₯Ό μ¬μ©νλ iOSλ νλ‘ν μ½μ ν΅ν΄ μ΄ λͺ¨λνλ₯Ό νκ³ μλ€.
Protocol Name {
var firstName: String { get set }
var lastName: String { get set }
}
Protocol Home {
var location: String { get set }
mutating func move() // λ©μλ λ΄μμ location λ³κ²½
}
struct Person: Name, Home {
var firstName: String
var lastName: String
func move() {
print("πππ")
}
}
Protocol Extension
μ°λ¦¬κ° νλ‘ν μ½μ μ±ννλ©΄ νμμ μΌλ‘ ν΄λΉ νλ‘ν μ½μ νλ‘νΌν°μ λ©μλλ₯Ό λͺ¨λ ꡬνν΄μΌ νλ€. κ·Όλ° λ§μ½ νλ‘ν μ½μ μ±νν λ§μ νμ νμ λ€μ΄ λμΌν μμ μ νλ€λ©΄ νλ‘μ νΈλ μ€λ³΅λ μ½λλ₯Ό λ§μ΄ κ°μ§κ² λ κ²μ΄λ€. μ΄λ¬ν νλ‘ν μ½μ λ¨μ μ μμ μ£Όλ κ²μ΄ λ°λ‘ Extensionμ΄λ€.
μ) λ©μΌκ³Ό λ¬Έμλ λμΌνκ² μμ κ³Ό λ°μ μμ μ΄ νμνλ€
νλ‘ν μ½λ‘ νμν μμ μ 'μ μ'νλ€λ©΄, Extensionμ ν΅ν΄ 'μ΄κΈ°κ΅¬ν'μ νμ¬ μ±ννλ λ§μ νμ μ μμ μ μ€μΌ μ μλ€. λν΄ μ΄κΈ° ꡬνλ μμ μ μ€λ²λΌμ΄λν μ μμ΄ νμ μ νΉμ±μ λ°λΌ λ³κ²½λ κ°λ₯νλ€. μ΄λ κ² νλ‘ν μ½ μ΅μ€ν μ μ ν΅ν΄ μ½λμ μ¬μ¬μ©μ±μ λμΌ μ μλ€.
2015 WWDC
μΌκ³° μ€μννΈ 5
Protocol
Protocol Oriented Programing
νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ°
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ Swift ] isCase | isLowercase | isUppercase (0) | 2023.10.04 |
---|---|
[ Swift ] print(_:separator:terminator:) (0) | 2023.10.04 |
[ Swift ] Serializationμ΄λ? (0) | 2023.01.18 |
[ Swift ] μ΅μ λ Optionals (0) | 2021.09.05 |
[ Swift ] ν¨μ (0) | 2021.09.02 |