SlideShare a Scribd company logo
Swift 3 :
Extensions
군산대학교 컴퓨터정보통신공학부 컴퓨터정보공학전공
남 광 우
kwnam@kunsan.ac.kr
Swift 3 Tour and Language Guide by Apple
Extension
• 정의
• 이미 존재하는 클래스나 구조체, 열거형 등의 객체에
새로운 기능을 확장
• 사용 목적
• Add computed instance properties / computed type properties
• Define instance methods and type methods
• Provide new initializers
• Define subscripts
• Define and use new nested types
• Make an existing type conform to a protocol
Extension 확장할 객체 {
// enumeration definition goes here
}
Extension
• 확장 구문의 정의
• Extension의 예
Extension 확장할 객체 {
// enumeration definition goes here
}
extension SomeType: SomeProtocol, AnotherProtocol {
// implementation of protocol requirements goes here
}
extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
var mm: Double { return self / 1_000.0 }
var ft: Double { return self / 3.28084 }
}
• Extension의 사용 예
• Extension의 연산 예
let oneInch = 25.4.mm
print("One inch is (oneInch) meters")
// Prints "One inch is 0.0254 meters“
let threeFeet = 3.ft
print("Three feet is (threeFeet) meters")
// Prints "Three feet is 0.914399970739201 meters"
let aMarathon = 42.km + 195.m
print("A marathon is (aMarathon) meters long")
// Prints "A marathon is 42195.0 meters long"
extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
var mm: Double { return self / 1_000.0 }
var ft: Double { return self / 3.28084 }
}
Extension
Extension : Initializer
• Initializer의 확장
• Before extension
struct Size {
var width = 0.0, height = 0.0
}
struct Point {
var x = 0.0, y = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
}
let defaultRect = Rect()
let memberwiseRect =
Rect(origin: Point(x: 2.0, y: 2.0), size: Size(width: 5.0, height: 5.0))
Extension : Initializer
• Initializer의 확장
• After init extension
extension Rect {
init(center: Point, size: Size) {
let originX = center.x - (size.width / 2)
let originY = center.y - (size.height / 2)
self.init(origin: Point(x: originX, y: originY), size: size)
}
}
let centerRect = Rect(center: Point(x: 4.0, y: 4.0),
size: Size(width: 3.0, height: 3.0))
// centerRect's origin is (2.5, 2.5) and its size is (3.0, 3.0)
Extension : Method
• Method의 확장 예
• 사용 예
extension Int {
func repetitions (task: () -> Void) {
for _ in 0..<self {
task()
}
}
}
3.repetitions {
print("Hello!")
}
// Hello!
// Hello!
// Hello!
Extension : Method
• Mutating Method의 확장 예
• 사용 예
extension Int {
mutating func square() {
self = self * self
}
}
var someInt = 3
someInt.square()
// someInt is now 9
extension Int {
subscript(digitIndex: Int) -> Int {
var decimalBase = 1
for _ in 0..<digitIndex {
decimalBase *= 10
}
return (self / decimalBase) % 10
}
}
Extension : Subscript
• Subscript의 확장 예
• 사용 예
746381295[0]
// returns 5
746381295[1]
// returns 9
746381295[2]
// returns 2
746381295[8]
// returns 7
Extension : nested type
• Nested type의 확장 예
extension Int {
enum Kind {
case negative, zero, positive
}
var kind: Kind {
switch self {
case 0:
return .zero
case let x where x > 0:
return .positive
default:
return .negative
}
}
}
Extension : nested type
• Nested type의 사용 예
func printIntegerKinds(_ numbers: [Int]) {
for number in numbers {
switch number.kind {
case .negative:
print("- ", terminator: "")
case .zero:
print("0 ", terminator: "")
case .positive:
print("+ ", terminator: "")
}
}
print("")
}
printIntegerKinds([3, 19, -27, 0, -6, 0, 7])
// Prints "+ + - 0 - 0 + "

More Related Content

PDF
Swift 3 Programming for iOS : Protocol
PDF
Python programming : Classes objects
PDF
Python programming : Threads
PPT
String classes and its methods.20
PDF
C h 04 oop_inheritance
PDF
ハイブリッド言語Scalaを使う
PPT
JAVA CONCEPTS
PDF
C# Summer course - Lecture 3
Swift 3 Programming for iOS : Protocol
Python programming : Classes objects
Python programming : Threads
String classes and its methods.20
C h 04 oop_inheritance
ハイブリッド言語Scalaを使う
JAVA CONCEPTS
C# Summer course - Lecture 3

What's hot (19)

PDF
Python programming : Abstract classes interfaces
PDF
Python unit 3 m.sc cs
PDF
The Ring programming language version 1.3 book - Part 56 of 88
PDF
C# Summer course - Lecture 4
PDF
Dive into Python Class
PDF
Python programming : Inheritance and polymorphism
PDF
The Ring programming language version 1.9 book - Part 98 of 210
PDF
Swift for TensorFlow - CoreML Personalization
PDF
Scala: A brief tutorial
PPTX
Ios development
PDF
Descriptor Protocol
PPT
Core java concepts
PDF
Introduction to Objective - C
PPT
Java căn bản - Chapter2
PPTX
Lecture 13, 14 & 15 c# cmd let programming and scripting
PPTX
Java string handling
PPTX
.NET F# Class constructor
PDF
Java 1-contd
PPTX
11. session 11 functions and objects
Python programming : Abstract classes interfaces
Python unit 3 m.sc cs
The Ring programming language version 1.3 book - Part 56 of 88
C# Summer course - Lecture 4
Dive into Python Class
Python programming : Inheritance and polymorphism
The Ring programming language version 1.9 book - Part 98 of 210
Swift for TensorFlow - CoreML Personalization
Scala: A brief tutorial
Ios development
Descriptor Protocol
Core java concepts
Introduction to Objective - C
Java căn bản - Chapter2
Lecture 13, 14 & 15 c# cmd let programming and scripting
Java string handling
.NET F# Class constructor
Java 1-contd
11. session 11 functions and objects
Ad

Viewers also liked (20)

PDF
Swift 3 Programming for iOS : Enumeration
PDF
Ieeepro techno solutions ieee dotnet project - privacy-preserving multi-keyw...
PDF
iOS 10 & XCode 8, Swift 3.0 features and changes
PDF
What's new in Swift 3
PPTX
PDF
Swift Tutorial Part 2. The complete guide for Swift programming language
PDF
[공간정보시스템 개론] L11 공간정보의 구축
PDF
[공간정보시스템 개론] L12 공간정보분석
PDF
[공간정보시스템 개론] L01 공간정보시스템개요
PDF
[FOSS4G KOREA 2014]Hadoop 상에서 MapReduce를 이용한 Spatial Big Data 집계와 시스템 구축
PDF
[공간정보시스템 개론] L03 지구의형상과좌표체계
PDF
[공간정보시스템 개론] L05 우리나라의 수치지도
PDF
[공간정보시스템 개론] L06 GIS의 이해
PDF
[공간정보시스템 개론] L09 공간 데이터 모델
PDF
[공간정보시스템 개론] L08 gnss의 개념과 활용
PDF
[공간정보시스템 개론] L10 수치표고모델
PDF
[공간정보시스템 개론] L02 공간정보와 지리정보
PDF
Swift 3 Programming for iOS : subscript init
PDF
Swift 3 Programming for iOS: error handling
PDF
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
Swift 3 Programming for iOS : Enumeration
Ieeepro techno solutions ieee dotnet project - privacy-preserving multi-keyw...
iOS 10 & XCode 8, Swift 3.0 features and changes
What's new in Swift 3
Swift Tutorial Part 2. The complete guide for Swift programming language
[공간정보시스템 개론] L11 공간정보의 구축
[공간정보시스템 개론] L12 공간정보분석
[공간정보시스템 개론] L01 공간정보시스템개요
[FOSS4G KOREA 2014]Hadoop 상에서 MapReduce를 이용한 Spatial Big Data 집계와 시스템 구축
[공간정보시스템 개론] L03 지구의형상과좌표체계
[공간정보시스템 개론] L05 우리나라의 수치지도
[공간정보시스템 개론] L06 GIS의 이해
[공간정보시스템 개론] L09 공간 데이터 모델
[공간정보시스템 개론] L08 gnss의 개념과 활용
[공간정보시스템 개론] L10 수치표고모델
[공간정보시스템 개론] L02 공간정보와 지리정보
Swift 3 Programming for iOS : subscript init
Swift 3 Programming for iOS: error handling
Swift Tutorial Part 1. The Complete Guide For Swift Programming Language
Ad

Similar to Swift 3 Programming for iOS : extension (8)

PDF
Hello Swift Final 5/5 - Structures and Classes
PDF
Swift Basics
PDF
Letswift Swift 3.0
PDF
Swift 3 Programming for iOS : Collection
PPTX
Swift 0x12 optional chaining
PDF
What's New in Swift 4
PPTX
하스켈 프로그래밍 입문 3
PPTX
KWDC 2023-Swift 히스토리 탐방
Hello Swift Final 5/5 - Structures and Classes
Swift Basics
Letswift Swift 3.0
Swift 3 Programming for iOS : Collection
Swift 0x12 optional chaining
What's New in Swift 4
하스켈 프로그래밍 입문 3
KWDC 2023-Swift 히스토리 탐방

More from Kwang Woo NAM (15)

PDF
메타버스시대의_디지털트윈과_지역성v01.pdf
PDF
해양디지털트윈v02.pdf
PDF
Moving objects media data computing(2019)
PDF
Moving Objects and Spatial Data Computing
PDF
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
PDF
[공간정보시스템 개론] L04 항공사진의 이해
PDF
[공간정보시스템 개론] L07 원격탐사의 개념과 활용
PDF
Swift 3 Programming for iOS : class and structure
PDF
Swift 3 Programming for iOS : Closure
PDF
Swift 3 Programming for iOS: Function
PDF
Swift 3 Programming for iOS : Control flow
PDF
Swift 3 Programming for iOS : data type
PDF
Swift 3 Programming for iOS
PDF
집단지성 프로그래밍 08-가격모델링
PDF
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01
메타버스시대의_디지털트윈과_지역성v01.pdf
해양디지털트윈v02.pdf
Moving objects media data computing(2019)
Moving Objects and Spatial Data Computing
세월호/ 타이타닉호 사고의 빅 데이터 방법론적 분석
[공간정보시스템 개론] L04 항공사진의 이해
[공간정보시스템 개론] L07 원격탐사의 개념과 활용
Swift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : Closure
Swift 3 Programming for iOS: Function
Swift 3 Programming for iOS : Control flow
Swift 3 Programming for iOS : data type
Swift 3 Programming for iOS
집단지성 프로그래밍 08-가격모델링
집단지성 프로그래밍 07-고급 분류 기법-커널 기법과 svm-01

Recently uploaded (20)

PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Designing Intelligence for the Shop Floor.pdf
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
System and Network Administration Chapter 2
PDF
PTS Company Brochure 2025 (1).pdf.......
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
L1 - Introduction to python Backend.pptx
PPTX
CHAPTER 2 - PM Management and IT Context
PPTX
history of c programming in notes for students .pptx
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
medical staffing services at VALiNTRY
PDF
Digital Strategies for Manufacturing Companies
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Operating system designcfffgfgggggggvggggggggg
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Designing Intelligence for the Shop Floor.pdf
Which alternative to Crystal Reports is best for small or large businesses.pdf
2025 Textile ERP Trends: SAP, Odoo & Oracle
Wondershare Filmora 15 Crack With Activation Key [2025
VVF-Customer-Presentation2025-Ver1.9.pptx
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
System and Network Administration Chapter 2
PTS Company Brochure 2025 (1).pdf.......
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
L1 - Introduction to python Backend.pptx
CHAPTER 2 - PM Management and IT Context
history of c programming in notes for students .pptx
Softaken Excel to vCard Converter Software.pdf
Navsoft: AI-Powered Business Solutions & Custom Software Development
medical staffing services at VALiNTRY
Digital Strategies for Manufacturing Companies
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...

Swift 3 Programming for iOS : extension

  • 1. Swift 3 : Extensions 군산대학교 컴퓨터정보통신공학부 컴퓨터정보공학전공 남 광 우 kwnam@kunsan.ac.kr Swift 3 Tour and Language Guide by Apple
  • 2. Extension • 정의 • 이미 존재하는 클래스나 구조체, 열거형 등의 객체에 새로운 기능을 확장 • 사용 목적 • Add computed instance properties / computed type properties • Define instance methods and type methods • Provide new initializers • Define subscripts • Define and use new nested types • Make an existing type conform to a protocol Extension 확장할 객체 { // enumeration definition goes here }
  • 3. Extension • 확장 구문의 정의 • Extension의 예 Extension 확장할 객체 { // enumeration definition goes here } extension SomeType: SomeProtocol, AnotherProtocol { // implementation of protocol requirements goes here } extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double { return self / 3.28084 } }
  • 4. • Extension의 사용 예 • Extension의 연산 예 let oneInch = 25.4.mm print("One inch is (oneInch) meters") // Prints "One inch is 0.0254 meters“ let threeFeet = 3.ft print("Three feet is (threeFeet) meters") // Prints "Three feet is 0.914399970739201 meters" let aMarathon = 42.km + 195.m print("A marathon is (aMarathon) meters long") // Prints "A marathon is 42195.0 meters long" extension Double { var km: Double { return self * 1_000.0 } var m: Double { return self } var cm: Double { return self / 100.0 } var mm: Double { return self / 1_000.0 } var ft: Double { return self / 3.28084 } } Extension
  • 5. Extension : Initializer • Initializer의 확장 • Before extension struct Size { var width = 0.0, height = 0.0 } struct Point { var x = 0.0, y = 0.0 } struct Rect { var origin = Point() var size = Size() } let defaultRect = Rect() let memberwiseRect = Rect(origin: Point(x: 2.0, y: 2.0), size: Size(width: 5.0, height: 5.0))
  • 6. Extension : Initializer • Initializer의 확장 • After init extension extension Rect { init(center: Point, size: Size) { let originX = center.x - (size.width / 2) let originY = center.y - (size.height / 2) self.init(origin: Point(x: originX, y: originY), size: size) } } let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0)) // centerRect's origin is (2.5, 2.5) and its size is (3.0, 3.0)
  • 7. Extension : Method • Method의 확장 예 • 사용 예 extension Int { func repetitions (task: () -> Void) { for _ in 0..<self { task() } } } 3.repetitions { print("Hello!") } // Hello! // Hello! // Hello!
  • 8. Extension : Method • Mutating Method의 확장 예 • 사용 예 extension Int { mutating func square() { self = self * self } } var someInt = 3 someInt.square() // someInt is now 9
  • 9. extension Int { subscript(digitIndex: Int) -> Int { var decimalBase = 1 for _ in 0..<digitIndex { decimalBase *= 10 } return (self / decimalBase) % 10 } } Extension : Subscript • Subscript의 확장 예 • 사용 예 746381295[0] // returns 5 746381295[1] // returns 9 746381295[2] // returns 2 746381295[8] // returns 7
  • 10. Extension : nested type • Nested type의 확장 예 extension Int { enum Kind { case negative, zero, positive } var kind: Kind { switch self { case 0: return .zero case let x where x > 0: return .positive default: return .negative } } }
  • 11. Extension : nested type • Nested type의 사용 예 func printIntegerKinds(_ numbers: [Int]) { for number in numbers { switch number.kind { case .negative: print("- ", terminator: "") case .zero: print("0 ", terminator: "") case .positive: print("+ ", terminator: "") } } print("") } printIntegerKinds([3, 19, -27, 0, -6, 0, 7]) // Prints "+ + - 0 - 0 + "