참고 : 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

간단히 데이터 저장관리 테스트 중 배열을 "UserDefaults"에 object 배열을 관리하고 싶어 테스트해 보았다.

안된다..........

찾아 보니  class배열은 Data형태로 변경해야만 저장이 가능하다.

아래 링크 참고하여 문제해결하기 바란다.

https://stackoverflow.com/questions/25179668/how-to-save-and-read-array-of-array-in-nsuserdefaults-in-swift


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

Convert a hex string into a UIColor  (0) 2018.01.22
유용하게 쓰이는 랜덤 함수  (0) 2017.10.14
텍스트 필드에서 숫자만 입력받기  (0) 2017.09.03
UITextView Placeholder  (0) 2017.08.19
HTTP Networking Framework - Alamofire  (0) 2016.02.03

텍스트 필드에서 숫자만 입력 받고자 하면 아래와 같이 하면 된다. (swift 3)


func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool

  {

    let allowedCharacters = CharacterSet.decimalDigits

    let characterSet = CharacterSet(charactersIn: string)

    return allowedCharacters.isSuperset(of: characterSet)

  }

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

유용하게 쓰이는 랜덤 함수  (0) 2017.10.14
UserDefaults 와 Array  (0) 2017.09.22
UITextView Placeholder  (0) 2017.08.19
HTTP Networking Framework - Alamofire  (0) 2016.02.03
StatusBar hidden 하기 (Swift)  (0) 2015.04.08

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

+ Date

* TimeZone

 날짜정보를 사용하다 보면 날짜를 포멧에 맞춰 출력을 해줘야 하는 경우가 많다.
이때 날짜를 찍어보면 설정한 날짜와 화면에 보이는 날짜나 시간 정보가 몇 시간 빠르게 혹은 느리게 보여지는 경우가 있다.
이는 현재 지역의 타임존과 기본적으로 설정되어 있는 타임존 정보가 틀려발생하는 것 같다.
지금은 시간이 없으니 자세한건 나중에 알아보도록 하자.

자 아래 예를 보자

실제로 설정한 날은 "2017-12-25 00:00:00" 이다.
하지만 print를 보면은 "2017-12-24 15:00:00" 으로 나타난다.
맙소사... 내가 원하는 건 이게 아니다.

원하는 값으로 나오 도록 하려면 타임존을 설정해 주면 된다.
abbreviation을 "UTC"로 해주면 한국 시간과 맞게 나온다.
abbreviation은 여러 타입이 있으니 해외에 거주하는 사람은 해당 지역 타임존 타입을 찾아 보길 바란다.

let locale = NSTimeZone.init(abbreviation: "UTC")

NSTimeZone.default = locale as! TimeZone

자 이제 타임존을 설정해 주고 결과 값을 보자
 

원하는 값이 나왔는가?



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

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

+ 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

+ Recent posts