Array 와 Set의 차이


거의 비슷한 형태의 Array와 Set!!  무슨 차이일까???

이것도 코드로 확인해보자!!!!


1
2
3
4
5
6
7
8
9
10
//Set의 경우 배열과 구분짓기 위해 타입(Set)을 명시해줘야한다!!!!
var testArray = ["사과""배""귤""바나나"]
var testSet : Set = ["사과""배""귤""바나나"]
 
 
testArray.insert("사과", atIndex: testArray.count)
//=> ["사과", "배", "귤", "바나나", "사과"]
 
testSet.insert("사과")
//=> ["사과", "배", "귤", "바나나"]
cs


testArray는 "사과"가 추가되었지만 testSet는 추가되지 않았다.
왜??
Set은 중복된 값을 허용하지 않기 때문이다.

한마디로 Array는 중복 여부와 상관없이 아무 값이나 넣을 수 있고
Set은 모든 값들이 고유한 값으로 채워지도록 되어있는 형태이다.


구문 레이블


반복문이나 조건문에 이름을 달자!!! 근데 왜??


말이 필요없다.  코드로 확인해보자.


1
2
3
4
5
6
7
8
9
10
label_1 : for i in 1...9
{
    label_2 : for j in 1...9
    {
        if j == 5
        {
            break label_1
        }
    }
}
cs

j 가 5가 되면 break로 for문을 빠져나가게 되는데 구문 레이블을 사용하지 않을 경우 다시 바깥에 있는 for문을

수행해야 한다.

하지만 구문레이블을 사용하면 바깥에 있는 label_까지 바로 빠져나갈 수 있다.


짱좋음!!



'개발 > Swift' 카테고리의 다른 글

#available  (0) 2015.12.22
extention  (0) 2015.12.12
willSet didSet  (0) 2015.12.11

#available


버전별 사용자 처리를 위한 키워드라고 할 수 있겠다.


유니티를 예로 들자면 각 유니티 버전에 대한 타입 분류를 


1
2
3
4
5
#if UNITY_4_6_5
    //4.6.5 버전 사용자 처리
#else
    //그 외 버전 사용자 처리
#endif
cs


이렇게 c# 전처리 define을 사용해서 처리할 수 있는데
스위프트는 #available 키워드로 코드상에서 좀더 세밀하게 처리가 가능하다.

1
2
3
4
5
6
7
if #available(iOS 9*)
{
    //ios 7 버전 사용자 처리
}else{
    //그 외 버전 사용자 처리
}
 
cs

또한, 여러개의 플랫폼을 구분지어서 체크할수도 있다.

#available(iOS 9, OSX 10.11.2, *)

여기서 주의할점은 항상 마지막엔 *을 넣어서 입력이 끝났음을 알려주어야 한다.



'개발 > Swift' 카테고리의 다른 글

구문 레이블  (0) 2015.12.22
extention  (0) 2015.12.12
willSet didSet  (0) 2015.12.11

xcode 라인 삭제


지금이 때가 어느때인데 말야

라인 삭제가 안되는 에디터라니!!!  이게 말이됨???!!


안되면 되게하자..

(참고로 난 이클립스 + 모노디벨롭 + 기타등등의 모든 에디터에서 라인 삭제는 command + d로 사용하고 있음)


1) xcode 종료 후 Finder > 이동 > 폴더로 이동 선택





2) 아래 링크 복 붙 후 이동 버튼 ㄱㄱ!!

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist



3) 발견한 파일을 다른 곳으로 복제

(해당 파일은 바로 열어서 수정이 안되기 때문에 복제 후 수정 해야함)



4) 텍스트 편집기로 열어서 <key>Deletions</key> 를 찾는다.




5) 제일 마지막 부분에 아래 항목 추가

<key>Delete Line</key>

<string>moveToEndOfLine:, deleteToBeginningOfLine:, deleteToEndOfParagraph:</string>




6) 저장 후 저장된 파일을 원래 있던 위치 

/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist 에 붙여넣기!!

(주의!! [대치] 로 덮의 씌워야함)






7) xcode 실행시킨 후 XCODE > Preferences... > Key Bindings 

Filter 입력창에서 delete line으로 추가한 항목을 검색 후 원하는 키로 설정해주면 끝!!





주의!)

입력한 키가 기존에 사용중일 경우가 있으므로 꼭 Conflicts에 들어가서 중복되는 키가 없는지 확인 후 사용해야함!!










extention


확장!??


음...    이럴때 써먹으면 좋을 듯 하다.


일단,

"안녕하세요" => "요세하녕안" 이렇게 역순으로 글자를 바꾸려면 


1
2
var testString:String = "안녕하세요"
String(testString.characters.reverse())

cs


이렇게 해주면 된다.

그런데 저렇게 사용해야할 부분이 많다면??

매번 저렇게 해줘도 되겠지만 

extention으로 String을 확장해서 사용하면 

아주 간단히 사용이 가능하다.


1
2
3
4
5
6
7
8
9
extension String
{
    func backwards() -> String
    {
        return String(self.characters.reverse())
    }
}
 
"안녕하세요".backwards()
cs

이 얼마나 아름다운 기능이냐....  ㅠㅠ  
swift 너란놈은..


'개발 > Swift' 카테고리의 다른 글

구문 레이블  (0) 2015.12.22
#available  (0) 2015.12.22
willSet didSet  (0) 2015.12.11

willSet didSet


아직 공부중이라 어떻게 사용하는게 Best일진 모르겠지만 암튼 사용 용도에 따라 엄청 쓰임새가 많은 놈 임에는 틀림이 없다.


간단하게 정의하자면 저놈들은 한마디로 


변수를 감시하는 감시자!!


그럼 어떻게 동작하는걸까?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class ObserverTest
{
    var testWill = 0
        {
        willSet
        {
            print("\(testWill) <= 바뀌기 전이야!!")
        }
        
        didSet
        {
            print("\(testWill) <= 값이 바꼈어!!")
        }
    }
    
    var testDid:Int = 0
        {
        didSet
        {
            if testDid > 5
            {
                testDid = 0
            }
            print(testDid)
        }
    }
}
var observer = ObserverTest()
observer.testWill = 10
cs


observer.testWill = 10 이 실행되는 순간 

0 <= 바뀌기 전이야!!

10 <= 값이 바꼈어!!


이렇게 찍힌다.

특정 변수를 모니터링 하고 있다가 값이 바뀌게 되면 

바뀌기 바로 직전에 willSet

바뀐 직후 didSet이 실행되는거다.


특정 변수의 값이 변하는 순간을 체크하고 싶을때 print를 걸어둔다던지

변수의 값이 제한 범위를 넘겼을 경우 다시 초기화 하고 싶다던지..

이런 경우 사용한다면 완전 편리하지 싶다!!!

'개발 > Swift' 카테고리의 다른 글

구문 레이블  (0) 2015.12.22
#available  (0) 2015.12.22
extention  (0) 2015.12.12

+ Recent posts