참고 : https://tmondev.blog.me/220690677856


오토레이아웃을 쉽고 가독성있게 도와주는 snapkit

https://github.com/SnapKit/SnapKit




'Autolayout' 카테고리의 다른 글

autolayout 사용시 좌/우에 여백이 생기는 경우  (0) 2015.04.07

참고 : https://crunchybagel.com/working-with-hex-colors-in-swift-3/


RGB 헥사 값을 UIColor로 변환 사용하는 예

extension UIColor {

    convenience init(hex: String) {

        let scanner = Scanner(string: hex)

        scanner.scanLocation = 0

        var rgbValue: UInt64 = 0        

        scanner.scanHexInt64(&rgbValue)

        

        let r = (rgbValue & 0xff0000) >> 16

        let g = (rgbValue & 0xff00) >> 8

        let b = rgbValue & 0xff

        

        self.init(

            red: CGFloat(r) / 0xff,

            green: CGFloat(g) / 0xff,

            blue: CGFloat(b) / 0xff, alpha: 1

        )

    }

}

let color = UIColor(hex: "ff0000") 



유용한 정보였길 바란다.

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

유용하게 쓰이는 랜덤 함수  (0) 2017.10.14
UserDefaults 와 Array  (0) 2017.09.22
텍스트 필드에서 숫자만 입력받기  (0) 2017.09.03
UITextView Placeholder  (0) 2017.08.19
HTTP Networking Framework - Alamofire  (0) 2016.02.03

간혹 무작위로 문자나 숫자를 추출해야 할 경우에 유용하게 쓰인다

참고 사이트 : https://learnappmaking.com/random-numbers-swift/

나는 임의의 문자열을 뽑기위한 코드를 자주 사용한다.

이 외에도 있으니 사이트를 참고하여 도움되기를 바란다.


func random(_ n: Int) -> String { let a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" var s = "" for _ in 0..<n { let r = Int(arc4random_uniform(UInt32(a.characters.count))) s += String(a[a.index(a.startIndex, offsetBy: r)]) } return s }

print(random(8)) // Output: 6FvUpkzp


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

Convert a hex string into a UIColor  (0) 2018.01.22
UserDefaults 와 Array  (0) 2017.09.22
텍스트 필드에서 숫자만 입력받기  (0) 2017.09.03
UITextView Placeholder  (0) 2017.08.19
HTTP Networking Framework - Alamofire  (0) 2016.02.03

UITextView에 입련 힌트를 보여줄 수 있는 Placeholder를 추가해줄 수 있는 클래스


간단하다.


링크로 들어가 클래스 파일만 추가하고 해당 텍스트뷰의 placeholder에 힌트만 적어주면 된다.

(ex : textview.placeholder = "힌트")


정말 편리하다.


설명이된 블로그 

https://finnwea.com/blog/adding-placeholders-to-uitextviews-in-swift


git-hub

https://gist.github.com/tijme/14ec04ef6a175a70dd5a759e7ff0b938


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

UserDefaults 와 Array  (0) 2017.09.22
텍스트 필드에서 숫자만 입력받기  (0) 2017.09.03
HTTP Networking Framework - Alamofire  (0) 2016.02.03
StatusBar hidden 하기 (Swift)  (0) 2015.04.08
swiftdoc.org  (0) 2015.01.20

+ String

- let으로 선언된 문자열은 NSString, var로 선언된 문자열은 NSMutableString과 동일
- String을 var로 선언한 경우에는 다양한 연산자와 메소드를 통해 문자열을 변경할 수 있음, 변경 과정에서 메모리 공간이 부족해지면 변경된 문자열을 모두 저장할 수 있는 새로운 메모리 공간을 할당, Exponential growth 전략이라고도 함, 새로운 메모리 공간을 할당할 때마다 이전보다 두 배 이상 큰공간을 할당, 이러한 작업은 성능에 영향을 줌
- Objective-C와 Swift 모두 사용할 수 있는 NSString과 달리 String은 Swift에서만 사용

* 문자열 생성

- let str = ""     //공백문자열
- let str = String()     //공백문자열
- let str = "Swift String"
- let str = String(stringLiteral: "Swift String")
- let str = NSString(string: "Swift String")

* 문자 생성

- 문자열과 리터럴 표형 방식 동일
- 문자를 생성할 때 반드시 Character 자료형을 명시적으로 지정해야 함
- let ch: Character = "A"
- let ch: Character = "AA"     //Error - Character 지정 후 두 개 이상의 문자를 포함하고 있어 에러
- let ch = Character("A")
- let ch: Character = " "     //하나의 공백 문자
- let ch = Character (" ")     //하나의 공백 문자

* 문자열 길이 확인

- NSString으로 선언하였을 경우

let str: NSString = "Swift String"

print(str. length)

- String 문자열 길이를 확인할 때는 가장 범용적인 characters 속성을 통해 얻을 수 있음

let str = "Swift"

print(str.characters.count)


- String 문자열은 isEmpty 속성으로 비어있는 문자열을 확인 할 수 있음

let str = "Swift"

if  str.isEmpty {

    //........

}


* 문자열 비교

let aString: NSString = "Apple"

let bString = "Orange"

let cString = "apple"


- isEqual (대소문자 구분함)

if aString.isEqual(to: bString) {

    print("Equal")

} else {

    print{"not Equal")

}

// not Equal


- compare (대소문자 구분, 리턴형이 NSComparisonResult, 사전 정렬 순서를 표현 가능(코드값 기준))

let result = aString.compare(bString)

switch result {

case .orderedAscending :

    print("ASC")

case .orderedSame :

    print("SAME")

case .orderedDescending :

    print("DESC")

}


- caseInsensitiveCompare (대소문자 구분하지 않음)

if (aString.caseInsensitiveCompare(bString) == ComparisonResult.orderedSame) {

    print("Equal")

} else {

    print("not Equal")

}


- ==, != 연산자를 통하여 비교할 수 있음

- <, <=, >, >= 연산자가 compare 메소드를 대신하여 사용 할 수 있음

if aString == bString {

    //...

} else if aString < cString {

    //...

} else {

    //....

}


* 문자열 다양한 범위 비교 대상 지정

- compare(_:options:range)

' 비교범위를 Range<Index> 형태로 전달

' options 파라미터에는 빈옵션을 전달 시 0 대신 []을 전달, Swift에서 빈옵션은 []로 나타냄

let compStringA = "Swift 3.0"

let compStringB = "Swift"


var result = compStringA.compare(compStringB)

print(result.rawValue)


let compareRange = compStringB.startIndex ..< compStringB.endIndex

result = compStringA.compare(compStringB, options: [], range: compareRange)

print(result.rawValue)


- hasPrefix, hasSuffic

' 접두어와 접미어를 비교

' 대소문자를 구분, 대소문자 구분이 필요하지 않은 시 compare(_:options:range) 메소드를 NSStringCompareOptions.CaseInsensitiveSearch 옵션과 함께 사용해야 함

let hasString = "Swift"

if hasString.hasPrefix("Swi") {

    print("ok")

}

if hasString.hasSuffix("Programming") {

    print("ok")

}

let compareHasRange = hasString.startIndex ..< hasString.index(hasString.startIndex, offsetBy: 4)

let hasResult = hasString.compare("swi", options: [.caseInsensitive], range: compareHasRange)

print(hasResult.rawValue)


* 문자열 연결

- NSString 자료형 명시

let str1: NSString = "Swift"

let str2 = str1.appending(" Programming")

print(str2)

let str3 = str1.appendingFormat(" %.1f %@", 3.0, "Programming")

print(str3)


- NSMutableString 자료형 명시

let strMS = NSMutableString(string: "Swift")

strMS.append(" Programming")

print(strMS)

strMS.setString("Swift")

strMS.appendFormat(" %.1f %@", 3.0, "Programming")


- String 문자열

' 메소드를 사용하지 않음

' +, += 연산자를 활용하여 두 문자열을 연결

let strString = "Swift" + " Programming"

print(strString)


var strVar = "Swift"

strVar += " Programming"

print(strVar)


' String Interpolation

let version = 3.0

let strSI = "Swift \(version) Programming"

print(strSI)


' String 문자열을 var로 선언하면 NSMutableString에서 제공하는 유사한 메소드를 사용할 수 있음 (append(_:)문자를 appending(_:)는 문자열을 연결할 때 사용, 그 외 appendingFormat(_:)도 존재)

var strAppend = "Swift"

strAppend.append("!")

print(strAppend)

strAppend.appending(" Programming")

print(strAppend)




문자관련해서는 봐야할 것도 많고 자주 사용않으면 잊어버리게 되니 자주 찾아 보게 될거 같다.

인덱싱이나 추출 등은 차 후 업데이트 하도록 하겠다.


Todo...







'Swift > Swift Basic (3.0Base)' 카테고리의 다른 글

Date  (0) 2017.02.17
Tuple (튜플)  (0) 2017.02.10
Closure  (0) 2017.02.10

+ Tuple (튜플)

* 구조체와 유사한 특징

- 멤버에 접근할 때 점 문법을 사용

- 원한는 만큼 멤버를 추가할 수 있음

* 구조체와 상반되는 특징

- 튜플은 선언 없이 사용 가능

- 튜플은 패턴 매칭을 지원

- 구조체는 let, var 키워드를 통해 멤버의 가변성을 지정할 수 있지만 튜플은 불가능

- 튜플은 생성자와 메소를 구현할 수 없음

- 튜플은 프로토콜을 채용할 수 없음

- 튜플은  인덱스를 통해 익명 멤버에 접근할 수 있음


Todo......

'Swift > Swift Basic (3.0Base)' 카테고리의 다른 글

Date  (0) 2017.02.17
String  (0) 2017.02.17
Closure  (0) 2017.02.10

+ Closure

- Swift 클로저는 세 가지 형태를 가지고 있음

1. 기본적인 형태
{ (파라미터 목록) -> 리턴형 in 실행할 코드 } or  { 실행할 코드 }

예1 

let simpleClosure = { (str: String) -> String in

    return "Hello, \(str)"

}


let result = simpleClosure("Swift Closure")

print(result)


예2 ) 

let simpleClosure = { print("Hello, Swift") }


simpleClosure()



- 클로저를 파라미터로 받는 함수

fun performClosure ( _ co: (String) -> (String) ) {

let result = co("Swift Closure")

print(result)

}


호출1 : 변수나 상수 전달

performClosure( simpleClosure )

호출2 : 인라인 클로저

performClosure( { (str: String) -> (String) in

    return "Hello2, \(str)"

} )



- 인라인 클로저의 경우 파라미터와 리턴형 추론 가능

예)

performClosure( { str in

    return "Hello3, \(str)"

})


- 암시적 리턴 (return 키워드 생략 가능, 인라인 클로저가 하나의 return명령문으로 구현되어있을 때만)

예)

performClosure( { str in

    "Hello4, \(str)"

})


- 클로저 내부에서 사용할 수 있는 축약된 인자이름 제공, 첫 번째 인자의 이름은 $0, 두 번째 인자의 이름은 $1 ..., 축약된 인자 이름 사용 시 파라미터 이름과 in 키워드를 생략가능

예 )

performClosure( { "Hello5, \($0)" })


2. 연산자 함수

- 클로저가 두 개의 파라미터를 비교한 후 결과를  Bool로 리턴한다면 인라인 클로저를 연산자 함수로 태체가능.

예1 ) 컬렉션을 정렬할 때 사용하는 sort 함수를 구현

let numbers = [1, 7, 23, 5, 8, 3, 6]

let orderedNumbers = numbers.sorted(by: { (lhs: Int, rhs: Int) in

    return lhs < rhs

} )


예2 ) 연산자 함수로 대체

let orderedNumbers2 = numbers.sorted(by: <)


3. Trailing Closure

- 인라인 클로저는 함수 호출 구문에 포함되는 형태이므로 클로저의 구현 부분이 단순한 경우에 적합

- 클로저의 구현이 복잡한 경우에는 트레일리 클로저로 구현하는 것이 좋음

- 인라인 클로저와 트레일링 클로저의 가장 큰 차이는 클로저가 포함되는 위치

1. 인라인 클로저는 함수 호출 시 사용하는 괄호 내부에 위치

예 ) 

performClosure( {( "Hello InlineClosure, \($0)")} )

2. 트레일링 클로저는 괄호 이후에 위치

예 )

performClosure() { "Hello TrailingClosure, \($0)" }


- 클로저가 함수의 마지막 파라미터로 전달되는 경우에만 사용가능

- 함수 이름 다음에 바로 {}가 온다면 이 함수는 하나의 파라미터를 가지고 있고, 트레일링 클로저라는 것을 직관적으로 유추할 수 있어야함 (함수와 혼동 할 수도 있기 때문)


- Swift 클로저는 외부에 선언되어 있는 변수를 클로저에 선언되는 시점에 변수의 참조가 클로저 내부로 전달되어 클로저 내부 또는 외부에서 값을 변경할 경우 동일한 값으로 변경됨


'Swift > Swift Basic (3.0Base)' 카테고리의 다른 글

Date  (0) 2017.02.17
String  (0) 2017.02.17
Tuple (튜플)  (0) 2017.02.10
  • 열거형 (Enumeration)
    • 선언 시 enum 키워드 사용
    • 열거형 멤버를 나열할 때는 case키워드 사용
    • 하나의 case에서 여러 멤버를 동시에 나열할 때는 ","로 구분
    • enum 열거형 이름 : 자료형 {

          case 멤버1 = 값

          case 멤버2 = 값, 멤버3, 멤버4

          case 멤버4

      }

    • 열거형 사용 시 반드시 점 문법 사용 (예: 열거형 이름.멤버이름)

    • 변수에 새로운 열거형 멤버를 할당랄 때는 ".멤버이름"과 같이 축약된 형태를 사용할 수 있음

    • 열거형 이름은 생량할 수 있지만 "."은 생략할 수 없으므로 주의

    • 정수 뿐만 아리나 문자열이나, 문자, 실수로 초기화 가능

    • 변수에 열거형 멤버가 아닌 값을 할당할 수 없음

    • 멤버는 반드시 열거형 내에서 유일한 원시값을 가져야한다.

    • 원시값을 얻어오려면 rawValue 속성 사용

    • .....


+ Recent posts