swift를 공부 할 일이 생겨서 이번에는 블로그로 작성을 하면서 해보자 라는 생각으로 쓰게 된 첫 게시글
인프런 강의를 보며 작성 중 ! (개발하는 정대리 스위프트 기초 문법)
var isDarkMode : Bool = true
if (isDarkMode == true){
print("다크모드 입니다")
} else {
print("다크모드가 아닙니다.")
}
if !isDarkMode {
print("다크모드가 아닙니다.")
} else {
print("다크모드 입니다.")
}
var text : String = isDarkMode == true ? "다크모드 입니다" : "다크모드 아닙니다"
// 콜렉션 : 데이터를 모아둔 것
// 배열, 셋, 딕셔너리 등
var myArray : [Int] = [0,1,2,3,4,5,6,7]
for item in myArray {
print("item: \(item)")
}
// 조건을 추가 가능하다
for item in myArray where item > 5 {
print("5보다 큰 수: \(item)")
}
enum School {
case elementary, middle, high
}
let yourSchool = School.high
print("yourSchool: \(yourSchool)") // high 출력
// enum 케이스에 값을 전달하는 경우
enum Grade : Int {
case first = 1
case second = 2
}
let yourGrade = Grade.second.rawValue // 2
// 또 다른 방식
enum SchoolDetail {
case elemantary(name: String)
case middle(name: String)
case high(name: String)
func getName() -> String {
switch self {
case .elementary(let name):
return name
case let .middle(name):
return name
case .high(let name):
return name
}
}
let yourMiddleSchoolName = SchoolDetail.middle(name: "중학중학교")
print("yourMiddleSchoolName: \(yourMiddleSchoolName)")
// middle(name: "중학중학교") 출력
print("yourMiddleSchoolName: \(yourMiddleSchoolName.getName())")
// 중학중학교 출력
// range
// 0...5 >> 0,1,2,3,4,5
for i in 0...5{
print(i)
}
//빈 배열 만드는 방법
var randomInts: [Int] = []
var randomInts: [Int] = [Int]()
// 24까지
for _ in 0..<25 {
let randomNumber = Int.random(in: 0...100)
randomInts.append(randomNubmer)
}
// 옵셔널이란 ? 값이 있는지 없는지 모름
var someVariable : Int? = nil
if someVariable == nil {
someVariable = 99
}
print(someVarialbe) // Optional(99) 출력
// 언랩핑 ? 감싸져있는 것을 벗기는 것
// 옵셔널인 상태의 변수를 벗긴다라는 의미
if let otherVariable = someVariable {
print("언랩핑 되었다. 즉 값이 있다. otherVariable : \(otherVariable)")
} else{
print("값 x")
}
// otherVariable : 99 출력
someVariable = nil
// 값이 비어있으면 기본값으로 어떤 값을 넣겠다
let myValue =someVariable ?? 10
print("\(myValue)") // 10
// 다른 언랩핑 방식 guard let
// if let과 방식은 비슷하다
func unwrap(parameter: Int?){
print("unwrap() called")
// 값이 없으면 리턴 함
guard let unWrappedParam = parameter
else{
return
}
print("unWrappedParam : \(unWrappedParam)")
}
// 유튜버 (데이터) 모델 - struct / 구조체
struct YoutuberStruct {
var name : String
var subscribersCount : Int
}
// 값의 복사, 클론에 수정을해도 원본에는 영향 x
var devJeong = YoutuberStruct(name: "아무개", subscribersCount: 123)
var devJeongClone = devJeong
// 클래스
class YoutuberClass {
var name : String
var subscribersCount : Int
// 생성자 - 즉 메모리에 올림
// init 으로 매개변수를 가진 생성자 메소드를 만들어야
// 매개변수를 넣어서 그 값을 가진 객체를 만들 수 있다
init(name: String, subscribersCount: Int){
self.name = name
self.subscribersCount = subscribersCount
}
}
// 복사가 아니라 참조를 하기 때문에 값의 변경을 하면 원본에도 영향이 간다
var jeongDaeRi = YoutuberClass(name: "정대리", subscribersCount: 1234)
var jeongDaeriClone = jeongDaeri
변수의 값이 설정되기 전과 후를 볼 수 있다
var myAge = 0 {
willSet{
print("값이 설정될 예정이다. myAge: \(myAge)")
}
didSet{
print("값이 설정되었다. myAge: \(myAge)")
}
}
myAge = 10
// willSet 실행 후(0 출력), didSet 실행이된다(10 출력)
// 함수, 메소드 정의
func myFunction(name: String) -> String{
return "안녕하세요 ? \(name) 입니다"
}
// 함수, 메소드 호출한다. call
myFunction(name: "정대리")
// with로 정의하는 방식 호출부에서 달라짐
func myFunction2(with name: String) -> String{
return "안녕하세요 ? \(name) 입니다"
}
myFunction2(with: "정대리")
// 아예 생략 하고 싶을 때
func myFunction3(_ name: String) -> String{
return "안녕하세요 ? \(name) 입니다"
}
myFunction3("정대리")
struct MyArray<SomeElement>{
//제네릭을 담은 빈 배열
var elements : [SomeElement] = [SomeElement]()
init(_ elements: [SomeElement]){
self.elements = elements
}
}
struct Friend{
var name: String
}
var mySomeArray = MyArray([1,2,3])
print(mySomeArray)
var myStringArray = MyArray(["가","나","다"])
print(myStringArray)
// 제네릭이란 어떠한 형태도 다 받을 수 있다
// 주로 MyArray<T> 로 표현을 함