Notice
Recent Posts
Recent Comments
Link
투케이2K
55. (TWOK/UTIL) [Ios/Objc] C_Util - string, 날짜, 빌드 정보, 모바일 제어, 형 변환 등 유틸 파일 클래스 본문
투케이2K 유틸파일
55. (TWOK/UTIL) [Ios/Objc] C_Util - string, 날짜, 빌드 정보, 모바일 제어, 형 변환 등 유틸 파일 클래스
투케이2K 2022. 6. 23. 15:03[설 명]
프로그램 : Ios / Objective-C
설 명 : C_Util - string, 날짜, 빌드 정보, 모바일 제어, 형 변환 등 유틸 파일 클래스
[소스 코드]
import Foundation
import UIKit
@objc class C_Util: NSObject {
// MARK: - [클래스 설명]
/*
// -----------------------------------------
1. 프로그램 상 필요한 유틸 파일 모음 클래스
// -----------------------------------------
2. extension 관련 정의 클래스
// -----------------------------------------
3. getNowDateTime24 : 24 시간 형태 현재 날짜 확인
// -----------------------------------------
4. getNowDateTime24Number : 24 시간 형태 현재 날짜 확인 [숫자 형태]
// -----------------------------------------
5. showMobileBuildInfo : 모바일 빌드 정보 확인
// -----------------------------------------
6. getMobileCode : 모바일 버전 코드 확인 (ex : 1 : Build)
// -----------------------------------------
7. getMobileVersion : 모바일 버전 명 확인 (ex : 1.0.0 : Version)
// -----------------------------------------
8. getMobilePackageName : 모바일 번들 ID 패키지명 확인 (ex : com.test.app)
// -----------------------------------------
9. getMobileSize : 모바일 화면 디바이스 사이즈 구하기 (S / M / L)
// -----------------------------------------
10. matchString : 문자열 정규식 수행 메소드
// -----------------------------------------
11. hexStringToData : 헥사 문자열 데이터를 바이트 배열 값으로 반환 실시
// -----------------------------------------
12. dataToHexString : 바이트 배열 값을 헥사 문자열 데이터로 반환 실시
// -----------------------------------------
13. fixStringToDate : 고정 문자열 데이터를 Date 형식으로 반환 실시
// -----------------------------------------
14. dateToMilliseconds : 현재 날짜 및 시간을 타임 스탬프 형식 문자열로 반환 실시
// -----------------------------------------
15. millisecondsToDate : 타임 스탬프 형식 문자열 데이터를 24 시간 Date 날짜 형식으로 포맷 후 문자열 반환 실시
// -----------------------------------------
16. getDateMinus : 타임 스탬프 값 기준 두 날짜 차이 확인 (초, 분, 시간 반환)
// -----------------------------------------
17. stringNotNull : 문자열 데이터 null 체크 수행 실시 (널이 아닌 경우 true / 널인 경우 false)
// -----------------------------------------
18. stringMultiContains : 문자열 데이터에서 다중 contains 값 포함 확인 (다중 값 포함 시 true / 아닌 경우 false)
// -----------------------------------------
19. stringJsonObjectEnable : String 문자열 데이터를 Json Object 형식으로 변경 가능 한지 체크 (변경 가능 시 true / 아닌 경우 false)
// -----------------------------------------
20. dic_To_JsonObject_String : 딕셔너리 데이터를 Json Object 형식 문자열로 변환 실시
// -----------------------------------------
21. jsonObject_To_Dic : jsonObject 형식 문자열 데이터를 딕셔너리로 반환 실시
// -----------------------------------------
22. htmlTagRemoveString : html 태그 제거 및 문자열 데이터 반환 실시
// -----------------------------------------
23. stringToByte : string 문자열 데이터를 byte (data) 값으로 반환 실시
// -----------------------------------------
24. byteToString : byte (data) 데이터를 string 문자열 데이터로 반환 실시
// -----------------------------------------
25. charCount : 특정 문자 개수 카운트 반환 실시
// -----------------------------------------
26. removeArrayStringOverlap : array string 배열 중복 데이터 제거 실시
// -----------------------------------------
27. stringIsNumber : string 문자열 데이터 모두 정수 구성 여부 확인
// -----------------------------------------
28. dataToByteString : Data 를 Byte 바이트 값 문자열로 리턴 실시
// -----------------------------------------
29. doubleCutLength : Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시
// -----------------------------------------
30. arraySubList : subList 사용해 array list 가변 배열 데이터 부분 데이터 반환 실시
// -----------------------------------------
31. getNowKorDate24 : 한국 시간 대로 24 시간 설정을 맞춰서 날짜 및 시간 데이터 반환
// -----------------------------------------
32. arrayDic_To_jsonArrayInJsonObj_String : 배열 + 딕셔너리 데이터를 JsonArray + JsonObject 형태 String 문자열 데이터 반환
// -----------------------------------------
33. jsonArrayInJsonObj_To_arrayDic : JsonArray + JsonObject 형태 String 데이터를 배열 + 딕셔너리 데이터로 반환
// -----------------------------------------
34. arrayIntersect : Array 배열 데이터 교집합 수행 실시
// -----------------------------------------
35. stringIsUrlParsing : String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시
// -----------------------------------------
36. arrayToEncodeString : 배열 데이터에서 한글 데이터 깨지는 것을 막기 위해 배열 전체 데이터 String 으로 인코딩 실시
// -----------------------------------------
37. dicToEncodeString : 딕셔너리 데이터에서 한글 데이터 깨지는 것을 막기 위해 딕셔너리 전체 데이터 String 으로 인코딩 실시
// -----------------------------------------
*/
// MARK: - [Objective C 소스 코드에서 호출 방법]
/*
// -----------------------------------------
1. import 선언 실시 : 프로젝트이름-Swift.h 명시 (#import "objectiveProject-Swift.h")
// -----------------------------------------
2. String 문자열 널 판단 실시 :
NSString *strData = @"";
if ([[C_Util shared] stringNotNullWithStr:strData] == true)
strData = @"twok";
if ([[C_Util shared] stringNotNullWithStr:strData] == true)
// -----------------------------------------
3. 딕셔너리 데이터 Json String 문자열로 반환 :
NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc] init];
[mutableDic setObject:@"투케이" forKey:@"name"];
[mutableDic setObject:@29 forKey:@"age"];
NSString *jsonString = [[C_Util shared] dic_To_JsonObject_StringWith_dicData: mutableDic];
jsonString.description.UTF8String
// -----------------------------------------
4. Json String 문자열 데이터를 딕셔너리로 변환 실시 :
NSMutableDictionary *dicData = [[C_Util shared] jsonObject_To_DicWithJsonString:jsonString];
bool nameContains = [dicData objectForKey:@"name"]; // [특정 key 포함]
NSString *nameData = [dicData objectForKey:@"name"]; // [value 확인]
printf("[dicData :: %s] \n", dicData.description.UTF8String);
printf("[nameContains :: %d] \n", nameContains);
printf("[nameData :: %s] \n", nameData.description.UTF8String);
// -----------------------------------------
*/
// MARK: - [클래스 싱글톤 설정 실시]
@objc static let shared = C_Util()
// MARK: - [24 시간 형태 현재 날짜 확인]
@objc func getNowDateTime24() -> String {
/*
// -----------------------------------------
[getNowDateTime24 메소드 설명]
// -----------------------------------------
1. 24 시간 형태 현재 날짜 및 시간 출력 메소드
// -----------------------------------------
2. 호출 방법 : C_Util().getNowDateTime24()
// -----------------------------------------
*/
// [date 객체 설정 수행 실시]
let nowDate = Date() // 현재의 Date 날짜 및 시간
let dateFormatter = DateFormatter() // Date 포맷 객체 선언
dateFormatter.locale = Locale(identifier: "ko") // 한국 지정
// [date 포맷 타입 정의]
// dateFormatter.dateFormat = "yyyy.MM.dd kk:mm:ss E요일" // Date 포맷 타입 지정
dateFormatter.dateFormat = "yyyy-MM-dd kk:mm:ss" // Date 포맷 타입 지정
let date_string = dateFormatter.string(from: nowDate) // 포맷된 형식 문자열로 반환
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getNowDateTime24() :: 24 시간 형태 현재 날짜 확인]")
print("-------------------------------")
print("date_string :: ", date_string)
print("====================================")
print("")
// [리턴 데이터 반환]
return date_string
}
// MARK: - [24 시간 형태 현재 날짜 확인 : 숫자 형태]
@objc func getNowDateTime24Number() -> String {
/*
// -----------------------------------------
[getNowDateTime24Number 메소드 설명]
// -----------------------------------------
1. 24 시간 형태 현재 날짜 및 시간 출력 메소드
// -----------------------------------------
2. 호출 방법 : C_Util().getNowDateTime24Number()
// -----------------------------------------
*/
// [date 객체 설정 수행 실시]
let nowDate = Date() // 현재의 Date 날짜 및 시간
let dateFormatter = DateFormatter() // Date 포맷 객체 선언
dateFormatter.locale = Locale(identifier: "ko") // 한국 지정
// [date 포맷 타입 정의]
dateFormatter.dateFormat = "yyyyMMddkkmmss" // Date 포맷 타입 지정
//dateFormatter.dateFormat = "kkmmss" // Date 포맷 타입 지정
let date_string = dateFormatter.string(from: nowDate) // 포맷된 형식 문자열로 반환
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getNowDateTime24Number() :: 24 시간 형태 현재 날짜 확인]")
print("-------------------------------")
print("date_string :: ", date_string)
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return date_string
}
// MARK: - [모바일 빌드 정보 확인]
@objc func showMobileBuildInfo(){
/*
// -----------------------------------------
[showMobileBuildInfo 메소드 설명]
// -----------------------------------------
1. 모바일 빌드 정보 확인 메소드
// -----------------------------------------
2. 호출 방법 : C_Util().showMobileBuildInfo()
// -----------------------------------------
*/
// [초기 변수 선언 실시]
var appName = ""
var appVersion = ""
var appBuildVersion = ""
var appBundleIdentifier = ""
if let infomation = Bundle.main.infoDictionary {
if let Name = infomation["CFBundleDisplayName"] as? String {
appName = Name
}
if let Version = infomation["CFBundleShortVersionString"] as? String {
appVersion = Version
}
if let BuildVersion = infomation["CFBundleVersion"] as? String {
appBuildVersion = BuildVersion
}
if let BundleIdentifier = infomation["CFBundleIdentifier"] as? String {
appBundleIdentifier = BundleIdentifier
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> showMobileBuildInfo() :: 모바일 빌드 정보 확인]")
print("-------------------------------")
print("appName :: ", appName)
print("-------------------------------")
print("appVersion :: ", appVersion)
print("-------------------------------")
print("appBuildVersion :: ", appBuildVersion)
print("-------------------------------")
print("appBundleIdentifier :: ", appBundleIdentifier)
print("====================================")
print("")
}
// MARK: - [모바일 버전 코드 확인]
@objc func getMobileCode() -> String {
/*
// -----------------------------------------
[getMobileCode 메소드 설명]
// -----------------------------------------
1. 모바일 버전 코드 확인 메소드 (ex : 1 : Build)
// -----------------------------------------
2. 호출 방법 : C_Util().getMobileCode()
// -----------------------------------------
*/
// [초기 변수 선언 실시]
var appBuildVersion = ""
if let infomation = Bundle.main.infoDictionary {
if let BuildVersion = infomation["CFBundleVersion"] as? String {
appBuildVersion = BuildVersion
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getMobileCode() :: 모바일 버전 코드 확인]")
print("-------------------------------")
print("code :: ", appBuildVersion)
print("====================================")
print("")
// [리턴 데이터 반환]
return appBuildVersion
}
// MARK: - [모바일 버전명 확인]
@objc func getMobileVersion() -> String {
/*
// -----------------------------------------
[getMobileVersion 메소드 설명]
// -----------------------------------------
1. 모바일 버전 명 확인 메소드 (ex : 1.0.0 : Version)
// -----------------------------------------
2. 호출 방법 : C_Util().getMobileVersion()
// -----------------------------------------
*/
// [초기 변수 선언 실시]
var appVersion = ""
if let infomation = Bundle.main.infoDictionary {
if let Version = infomation["CFBundleShortVersionString"] as? String {
appVersion = Version
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getMobileVersion() :: 모바일 버전 명 확인]")
print("-------------------------------")
print("version :: ", appVersion)
print("====================================")
print("")
// [리턴 데이터 반환]
return appVersion
}
// MARK: - [모바일 번들 ID 패키지명 확인]
@objc func getMobilePackageName() -> String {
/*
// -----------------------------------------
[getMobilePackageName 메소드 설명]
// -----------------------------------------
1. 모바일 번들 ID 패키지명 확인 (ex : com.test.app)
// -----------------------------------------
2. 호출 방법 : C_Util().getMobilePackageName()
// -----------------------------------------
*/
// [초기 변수 선언 실시]
var appBundleIdentifier = ""
if let infomation = Bundle.main.infoDictionary {
if let BundleIdentifier = infomation["CFBundleIdentifier"] as? String {
appBundleIdentifier = BundleIdentifier
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getMobilePackageName() :: 모바일 번들 ID 패키지명 확인]")
print("-------------------------------")
print("package :: ", appBundleIdentifier)
print("====================================")
print("")
// [리턴 데이터 반환]
return appBundleIdentifier
}
// MARK: - [모바일 화면 크기 구하기]
@objc func getMobileSize() -> String {
/*
// -----------------------------------------
[getMobileSize 메소드 설명]
// -----------------------------------------
1. 모바일 화면 크기 구하기
// -----------------------------------------
2. 호출 방법 : C_Util().getMobileSize()
// -----------------------------------------
3. 리턴 반환 : S / M / L
// -----------------------------------------
*/
// [리턴 데이터 반환 변수 선언]
var returnData = ""
// [뷰 전체 논리적 폭 길이 : css 측정 값]
let _screenLogicalWidth = UIScreen.main.bounds.size.width
// [뷰 전체 논리적 높이 길이 : css 측정 값]
let _screenLogicalHeight = UIScreen.main.bounds.size.height
// [뷰 스케일 값]
let _screenScale = UIScreen.main.scale
// [뷰 전체 물리적 폭 길이 : 실제 디바이스 표현 화소]
let _screenPhysicalWidth = (_screenLogicalWidth * (_screenScale * _screenScale)) / 2
// [뷰 전체 물리적 높이 길이 : 실제 디바이스 표현 화소]
let _screenPhysicalHeight = (_screenLogicalHeight * (_screenScale * _screenScale)) / 2
// [디바이스 기기 모델 확인 실시]
let _deviceModel = UIDevice.current.model
// [디바이스 기기 버전 확인 실시]
let _deviceVersion = UIDevice.current.systemVersion
// [디바이스 기기 이름 확인 실시]
let _deviceName = UIDevice.current.name
// [디바이스 OS 확인 실시]
let _deviceOs = UIDevice.current.systemName
// [디바이스 화면 인치 사이즈 구하기]
let screenBounds = UIScreen.main.bounds
let screenScale = UIScreen.main.scale
let screenSize = CGSize(width: screenBounds.size.width * screenScale, height: screenBounds.size.height * screenScale)
let ppi = screenScale * (UIDevice.current.userInterfaceIdiom == .pad ? 132 : 163)
let horizontal = screenSize.width / ppi
let vertical = screenSize.height / ppi
let diagonal = sqrt(pow(horizontal, 2) + pow(vertical, 2))
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 모바일 화면 크기 확인]")
print("-------------------------------")
print("[_deviceModel :: \(_deviceModel)]")
print("-------------------------------")
print("[_deviceVersion :: \(_deviceVersion)]")
print("-------------------------------")
print("[_deviceName :: \(_deviceName)]")
print("-------------------------------")
print("[_deviceOs :: \(_deviceOs)]")
print("-------------------------------")
print("[_screenLogicalWidth :: \(_screenLogicalWidth)]")
print("-------------------------------")
print("[_screenLogicalHeight :: \(_screenLogicalHeight)]")
print("-------------------------------")
print("[_screenScale :: \(_screenScale)]")
print("-------------------------------")
print("[_screenPhysicalWidth :: \(_screenPhysicalWidth)]")
print("-------------------------------")
print("[_screenPhysicalHeight :: \(_screenPhysicalHeight)]")
print("-------------------------------")
print("[diagonal [인치] :: \(diagonal)]")
print("====================================")
print("")
// [화면 사이즈 확인 및 디바이스 기기 종류 확인]
if _screenLogicalWidth == 390 && _screenLogicalHeight == 844 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone 13 / iPhone 13 Pro / iPhone 12 / iPhone 12 Pro]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 375 && _screenLogicalHeight == 812 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone 13 mini / iPhone 12 mini / iPhone 11 Pro / iPhone XS / iPhone X]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 428 && _screenLogicalHeight == 926 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone 13 Pro Max / iPhone 12 Pro Max]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 375 && _screenLogicalHeight == 667 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone SE 2nd gen / iPhone 8 / iPhone 7 / iPhone 6s / iPhone 6]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 414 && _screenLogicalHeight == 896 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone 11 Pro Max / iPhone 11 / iPhone XR / iPhone XS Max]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 414 && _screenLogicalHeight == 736 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone 8 Plus]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 476 && _screenLogicalHeight == 847 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone 7 Plus / iPhone 6s Plus / iPhone 6 Plus]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 320 && _screenLogicalHeight == 568 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone SE 1st gen / iPhone 5C / iPhone 5S / iPhone 5 / iPod touch 6th gen / iPod touch 5th gen]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 320 && _screenLogicalHeight == 480 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPhone 4S / iPhone 4 / iPhone 3GS / iPhone 3G / iPhone 1st gen / iPod touch 4th gen]")
print("-------------------------------")
print("[Device :: iPod touch 3rd gen / iPod touch 2nd gen / iPod touch 1st gen]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 744 && _screenLogicalHeight == 1133 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPad Mini (6th gen)]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 810 && _screenLogicalHeight == 1080 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPad 9th gen / iPad 8th gen / iPad 7th gen]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 1024 && _screenLogicalHeight == 1366 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPad Pro (5th gen 12.9) / iPad Pro (4th gen 12.9) / iPad Pro (3rd gen 12.9) / iPad Pro (2nd gen 12.9)]")
print("-------------------------------")
print("[Device :: iPad Pro (1st gen 12.9)]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 834 && _screenLogicalHeight == 1194 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPad Pro (5th gen 11) / iPad Pro (4th gen 11) / iPad Pro (3rd gen 11)]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 820 && _screenLogicalHeight == 1180 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPad Air (4th gen)]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 768 && _screenLogicalHeight == 1024 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPad Mini (5th gen) / iPad 6th gen / iPad 5th gen / iPad Pro (1st gen 9.7)]")
print("-------------------------------")
print("[Device :: iPad mini 4 / iPad Air 2 / iPad mini 3 / iPad mini 2 / iPad Air]")
print("-------------------------------")
print("[Device :: iPad 4th gen / iPad mini / iPad 3rd gen / iPad 2 / iPad 1st gen]")
print("====================================")
print("")
}
else if _screenLogicalWidth == 834 && _screenLogicalHeight == 1112 {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: iPad Air (3rd gen) / iPad Pro (2nd gen 10.5)]")
print("====================================")
print("")
}
else {
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[Device :: ELSE]")
print("====================================")
print("")
}
// [화면 인치 사이즈 기준으로 디바이스 크기 리턴 데이터 반환 실시]
if diagonal <= 3 {
/*
[디바이스 종류]
1. 시계
*/
returnData = "S"
}
else if diagonal <= 4 {
/*
[디바이스 종류]
1. 아이폰 3G , 아이폰 4 , 아이폰 4S
2. 아이폰 5 , 아이폰 5S , 아이폰 5c
3. 아이폰 SE (2016)
*/
returnData = "S"
}
else if diagonal <= 5 {
/*
[디바이스 종류]
1. 아이폰 6 , 아이폰 6s , 아이폰 7
2. 아이폰 8 , 아이폰 SE2 (2020)
*/
returnData = "M"
}
else if diagonal <= 6 {
/*
[디바이스 종류]
1. 아이폰 6 Plus , 아이폰 6s Plus , 아이폰 7 Plus
2. 아이폰 8 Plus , 아이폰 X , 아이폰 XS
3. 아이폰 11 Pro , 아이폰 12 mini , 아이폰 13 mini
*/
returnData = "M"
}
else if diagonal <= 7 {
/*
[디바이스 종류]
1. 아이폰 XS Max , 아이폰 XR , 아이폰 11
2. 아이폰 11 Pro Max , 아이폰 12 , 아이폰 12 Pro
3. 아이폰 12 Pro Max , 아이폰 13 , 아이폰 13 pro
4. 아이폰 13 Pro Max
*/
returnData = "L"
}
else {
returnData = "L"
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getMobileSize() :: 디바이스 종류 확인]")
print("-------------------------------")
print("[디바이스 화면 사이즈 :: \(returnData)]")
print("====================================")
print("")
// [리턴 데이터 반환]
return returnData
}
// MARK: - [정규식 수행 메소드]
@objc func matchString(string: String) -> String {
/*
// -----------------------------------------
[matchString 메소드 설명]
// -----------------------------------------
1. 정규식 수행 메소드
// -----------------------------------------
2. 호출 방법 : C_Util().matchString(string: "hello @@ TWOK !! 투케이 222")
// -----------------------------------------
3. 리턴 반환 : 정규식을 수행한 문자열 데이터 반환
// -----------------------------------------
*/
// [결과를 반환할 변수 선언 실시]
var returnData = ""
// [사전 인풋 데이터 널 체크 수행 실시]
if string != nil && string.count>0 && string != "" { // [인풋 값이 널이 아닌 경우]
let strArr = Array(string) // [문자열 한글자씩 확인을 위해 배열에 담는다]
let pattern = "^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9]$" // [정규식 : 한글, 영어, 숫자만 허용 (공백, 특수문자 제거)]
//let pattern = "^[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9\\s]$" // [정규식 : 한글, 영어, 숫자, 공백만 허용 (특수문자 제거)]
// [문자열 길이가 한개 이상인 경우만 패턴 검사 수행]
var resultString = ""
if strArr.count > 0 {
if let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive) {
var index = 0
while index < strArr.count { // [string 문자 하나 마다 개별 정규식 체크]
let checkString = regex.matches(in: String(strArr[index]), options: [], range: NSRange(location: 0, length: 1))
if checkString.count == 0 {
index += 1 // [정규식 패턴 외의 문자가 포함된 경우]
}
else { // 정규식 포함 패턴의 문자
resultString += String(strArr[index]) // [리턴 문자열에 추가]
index += 1
}
}
}
// [리턴 변수에 삽입 실시]
returnData = resultString
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> matchString() :: 문자열 정규식 수행 실시]")
print("-------------------------------")
print("input :: \(string)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환]
return returnData
}
// MARK: - [hex string to byte array : 헥사 문자열을 바이트 배열로 반환]
@objc func hexStringToData(string: String) -> Data {
/*
// -----------------------------------------
[hexStringToData 메소드 설명]
// -----------------------------------------
1. 헥사 문자열 데이터를 바이트 배열로 반환 수행
// -----------------------------------------
2. 호출 방법 : C_Util().hexStringToData(string: "01 23 45 67 89 ab cd ef")
// -----------------------------------------
3. 리턴 반환 : 헥사 문자열 데이터를 바이트 배열로 반환
// -----------------------------------------
*/
// [사전 인풋 데이터 널 체크 수행 실시]
var _string = ""
var data: Data = Data()
if (string != nil && string.count>0 && string != ""){
// [0x , 0X , 공백 데이터 제거 실시]
_string = string.replacingOccurrences(of: "0x", with: "")
_string = string.replacingOccurrences(of: "0X", with: "")
_string = string.replacingOccurrences(of: " ", with: "")
// [문자열 한글자씩 분리해서 배열에 담은 후 바이트 값으로 변환]
let stringArray = Array(_string)
for i in stride(from: 0, to: _string.count, by: 2) { // [문자열 2개씩 지정]
let pair: String = String(stringArray[i]) + String(stringArray[i+1])
if let byteNum = UInt8(pair, radix: 16) {
let byte = Data([byteNum])
data.append(byte)
}
else{
fatalError()
}
}
}
// [바이트 배열에 담긴 값 확인 실시]
var byteStr = ""
if data != nil && data.count > 0 {
byteStr = "["
for i in stride(from: 0, through: data.count-1, by: 1) {
byteStr += String(describing: data[i]) // [개별 바이트 값을 삽입]
if i != data.count-1 { // [배열 형태로 찍기 위함]
byteStr += ", "
}
}
byteStr += "]"
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> hexStringToData() :: 헥사 데이터를 바이트 배열 값으로 반환 실시]")
print("-------------------------------")
print("input :: \(string)")
print("-------------------------------")
print("format :: \(_string)")
print("-------------------------------")
print("return :: \(byteStr)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return data
}
// MARK: - [byte array to hex string : 바이트 배열 값을 헥사 문자열 데이터로 반환]
@objc func dataToHexString(data: Data) -> String {
/*
// -----------------------------------------
[dataToHexString 메소드 설명]
// -----------------------------------------
1. 바이트 배열을 헥사 문자열 데이터로 반환 실시
// -----------------------------------------
2. 호출 방법 :
var dataValue : Data = Data()
dataValue.append(1)
dataValue.append(35)
dataValue.append(69)
dataValue.append(103)
dataValue.append(137)
dataValue.append(171)
dataValue.append(205)
dataValue.append(239)
C_Util().dataToHexString(data: dataValue)
// -----------------------------------------
3. 리턴 반환 : 바이트 배열 데이터를 헥사 문자열 데이터로 반환
// -----------------------------------------
*/
// [리턴 데이터 변수 선언]
var returnData = ""
var byteStr = ""
// [사전 인풋 데이터 널 체크 수행 실시]
if data != nil && data.count>0 {
// [바이트 배열 값 확인 실시]
byteStr = "["
for i in stride(from: 0, through: data.count-1, by: 1) {
byteStr += String(describing: data[i]) // [개별 바이트 값을 삽입]
if i != data.count-1 { // [배열 형태로 찍기 위함]
byteStr += ", "
}
}
byteStr += "]"
// [헥사 문자열 데이터로 변환 실시]
returnData = data.map { String(format: "%02hhx ", $0) }.joined()
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> dataToHexString() :: 바이트 배열 값을 헥사 문자열 데이터로 반환 실시]")
print("-------------------------------")
print("input :: \(byteStr)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [고정 날짜 DATE 날짜 반환 메소드 : 2000-01-01 00:00:00]
@objc func fixStringToDate(_str : String) -> Date {
/*
// -----------------------------------------
[fixStringToDate 메소드 설명]
// -----------------------------------------
1. 특정 날짜 문자열 데이터를 Date 형식으로 반환 수행 실시
// -----------------------------------------
2. 호출 방법 : C_Util().fixStringToDate(_str: "2000-01-01 00:00:00")
// -----------------------------------------
3. 리턴 반환 : 고정 날짜 문자열 데이터를 Date 형식으로 반환 실시
// -----------------------------------------
*/
// -----------------------------------------
// MARK: [_str 인풋 데이터 형식]
// [24시간 형태] : yyyy-MM-dd kk:mm:ss
// [고정 시간 사용] : 2000-01-01 00:00:00
// -----------------------------------------
// [Date 포맷 객체]
let dateFormatter = DateFormatter()
// -----------------------------------------
// [Date 포맷 형식]
dateFormatter.dateFormat = "yyyy-MM-dd kk:mm:ss"
//dateFormatter.dateFormat = "yyyy-MM-dd" // 포맷 형식
// -----------------------------------------
// [인풋으로 들어온 날짜 형식 string 을 Date 값으로 변환 실시]
let convertDate:Date = dateFormatter.date(from: _str)!
// -----------------------------------------
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> fixStringToDate() :: 특정 날짜 및 시간 고정 Date 형식으로 반환 실시]")
print("-------------------------------")
print("input :: \(_str)")
print("-------------------------------")
print("return :: \(convertDate)")
print("====================================")
print("")
// -----------------------------------------
// [리턴 데이터 반환 실시]
return convertDate
}
// MARK: - [현재 날짜 및 시간을 타임 스탬프 형식 반환 : milliseconds]
@objc func dateToMilliseconds() -> String {
/*
// -----------------------------------------
[dateToMilliseconds 메소드 설명]
// -----------------------------------------
1. 현재 날짜 및 시간을 타임 스탬프 형식 반환 : milliseconds
// -----------------------------------------
2. 호출 방법 : C_Util().dateToMilliseconds()
// -----------------------------------------
3. 리턴 반환 : 타임 스탬프 데이터를 String 형식으로 반환 실시 : [13자리] 1648349189806
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [리턴 데이터에 값 삽입 실시]
returnData = String(describing: Int64((Date().timeIntervalSince1970 * 1000.0).rounded()))
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> dateToMilliseconds() :: 현재 날짜 및 시간을 타임 스탬프 형식 반환 실시]")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [타임 스탬프 형식 문자열 데이터를 날짜로 포맷해서 반환 실시]
@objc func millisecondsToDate(str: String) -> String {
/*
// -----------------------------------------
[millisecondsToDate 메소드 설명]
// -----------------------------------------
1. 타임 스탬프 형식 문자열 데이터를 24 시간 날짜로 포맷해서 반환 실시
// -----------------------------------------
2. 호출 방법 : C_Util().millisecondsToDate(str: "1648349189806")
// -----------------------------------------
3. 리턴 반환 : 24 시간 형태 Date 문자열 데이터
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [사전 인풋값 체크 수행 실시]
if str != nil && str.count>0 && str != "" {
// [Date 포맷 객체]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd kk:mm:ss"
// [타임 스탬프 값을 Date 로 변환]
let convertDate:Date = Date(timeIntervalSince1970: TimeInterval(Int64(str) ?? 0) / 1000)
// [리턴 결과에 삽입 실시]
returnData = String(describing: dateFormatter.string(from: convertDate))
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> millisecondsToDate() :: 타임 스탬프 형식 문자열 데이터를 날짜 형식 문자열 데이터 반환]")
print("-------------------------------")
print("input :: \(str)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [두 날짜 차이 계산 수행 실시 : 타임 스탬프 값 기준]
@objc func getDateMinus(bigDate:String, smallDate:String) -> Int{
/*
// -----------------------------------------
[getDateMinus 메소드 설명]
// -----------------------------------------
1. 날짜 형식 : date 형식을 milli seconds 형식으로 받는다 (ex: 1644466392686)
// -----------------------------------------
2. bigDate (큰 날짜) - smallDate (작은 날짜) 연산 수행
// -----------------------------------------
3. 리턴 형식 : 초 , 분 , 시간 단위 선택
// -----------------------------------------
4. 호출 예시 :
- C_Util().getDateMinus(bigDate:"1644466392686", smallDate:"1644466392686") // [동일]
- C_Util().getDateMinus(bigDate:"1644466392686", smallDate:"1644466169826") // [다름]
// -----------------------------------------
*/
// [초기 리턴 데이터 선언]
var returnData = 0
// [인풋으로 들어온 값에 공백이 있는 경우 제거 실시]
var _bigDate = String(describing: bigDate ?? "")
var _smallDate = String(describing: smallDate ?? "")
_bigDate = _bigDate.replacingOccurrences(of: " ", with: "")
_smallDate = _smallDate.replacingOccurrences(of: " ", with: "")
// [인풋으로 들어온 값이 널이 아닌지 확인 실시]
if _bigDate != nil && _bigDate.count>0 && _bigDate != ""
&& _smallDate != nil && _smallDate.count>0 && _smallDate != "" {
// [인풋으로 들어온 값이 모두 숫자로 구성되어 있는지 확인 실시]
var _bigDate_NotNumber = false
var _smallDate_NotNumber = false
for _big_char in _bigDate {
if _big_char.isNumber == false { // 정수 값이 아닌 경우
_bigDate_NotNumber = true
}
}
for _small_char in _smallDate {
if _small_char.isNumber == false { // 정수 값이 아닌 경우
_smallDate_NotNumber = true
}
}
// [로직 처리 수행 실시]
if _bigDate_NotNumber == false && _smallDate_NotNumber == false { // 모두 정수로 구성된 경우
let _big_int64 = Int64(_bigDate) ?? 0 // 형변환
let _small_int64 = Int64(_smallDate) ?? 0 // 형변환
let b_date = Date(timeIntervalSince1970: TimeInterval(Int64(_big_int64) ?? 0) / 1000) // 정식 날짜로 출력
let s_date = Date(timeIntervalSince1970: TimeInterval(Int64(_small_int64) ?? 0) / 1000) // 정식 날짜로 출력
let minus = (_big_int64 - _small_int64) // 밀리세컨드 빼기 수행
let seconds = minus / 1000 // 초 단위 기준 차이
let minute = seconds / 60 // 분 단위 기준 차이
let hour = minute / 60 // 시간 단위 기준 차이
print("")
print("====================================")
print("[C_Util >> getDateMinus() :: 두 날짜 차이 계산 결과 확인]")
print("-------------------------------")
print("_bigDate [인풋 날짜_1] : ", _bigDate)
print("_smallDate [인풋 날짜_2] : ", _smallDate)
print("-------------------------------")
print("b_date [인풋 날짜_1] : ", b_date)
print("s_date [인풋 날짜_2] : ", s_date)
print("-------------------------------")
print("minus [빼기 수행] :: ", minus)
print("seconds (초) 차이 :: ", seconds)
print("minute (분) 차이 :: ", minute)
print("hour (시간) 차이 :: ", hour)
print("====================================")
print("")
// [원하는 타입 선택 후 리턴 결과 반환 실시]
returnData = Int(minute) // [분]
//returnData = Int(seconds) // [초]
return returnData
}
else { // 문자가 포함된 경우
print("")
print("====================================")
print("[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]")
print("-------------------------------")
print("_bigDate [인풋 날짜_1] : ", _bigDate)
print("-------------------------------")
print("_smallDate [인풋 날짜_2] : ", _smallDate)
print("-------------------------------")
print("error [문자 에러] : ", "비정상 데이터")
print("====================================")
print("")
// [결과 리턴 수행 실시]
return returnData
}
}
else {
print("")
print("====================================")
print("[C_Util >> getDateMinus() :: 두 날짜 차이 계산 에러]")
print("-------------------------------")
print("_bigDate [인풋 날짜_1] : ", _bigDate)
print("-------------------------------")
print("_smallDate [인풋 날짜_2] : ", _smallDate)
print("-------------------------------")
print("error [널 에러] : ", "비정상 데이터")
print("====================================")
print("")
// [결과 리턴 수행 실시]
return returnData
}
}
// MARK: - [string 문자열 데이터 널 체크 수행 실시]
@objc func stringNotNull(str: String) -> Bool {
/*
// -----------------------------------------
[stringNotNull 메소드 설명]
// -----------------------------------------
1. string 문자열 데이터 널 체크 수행 실시
// -----------------------------------------
2. 호출 방법 : C_Util().stringNotNull(str: "hello투케이")
// -----------------------------------------
3. 리턴 반환 : 널이 아닌 경우 true / 널인 경우 false
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = false
// [인풋 데이터 널 체크 수행 실시]
if str != nil
&& str.count>0
&& str != ""
&& str.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& str.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& str.isEmpty == false {
// [리턴 결과 데이터 삽입]
returnData = true
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> stringNotNull() :: string 문자열 데이터 널 체크 수행 실시]")
print("-------------------------------")
print("input :: \(str)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [String 문자열 데이터 다중 contains 포함 여부 확인 실시]
@objc func stringMultiContains(str: String, array:Array<String>) -> Bool {
/*
// -----------------------------------------
[stringMultiContains 메소드 설명]
// -----------------------------------------
1. String 문자열 데이터 다중 contains 포함 여부 확인 실시
// -----------------------------------------
2. 호출 방법 : C_Util().stringMultiContains(str: "hello투케이TWOK", array: ["투케이", "TWOK"])
// -----------------------------------------
3. 리턴 반환 : 다중 값을 포함하는 경우 true / 포함하지 않는 경우 false
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = true
// [인풋 데이터 널 체크 수행 실시]
if str != nil
&& str.count>0
&& str != ""
&& str.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& str.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& str.isEmpty == false
&& array != nil
&& array.count>0
&& array.isEmpty == false {
// [for 문을 돌면서 다중 값 포함 확인 실시]
for i in stride(from: 0, through: array.count-1, by: 1) {
if str.contains(array[i]) == true {
// [특정 값을 포함하는 경우]
}
else {
// [특정 값을 포함하지 않는 경우]
returnData = false
}
}
}
else {
// [리턴 데이터 값 삽입]
returnData = false
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> stringMultiContains() :: string 문자열 데이터 다중 contains 포함 여부 확인 실시]")
print("-------------------------------")
print("input [str] :: \(str)")
print("-------------------------------")
print("input [array] :: \(array)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [String 문자열 데이터 Json Object 형식으로 변경 가능 한지 체크 실시]
@objc func stringJsonObjectEnable(str: String) -> Bool {
/*
// -----------------------------------------
[stringJsonObjectEnable 메소드 설명]
// -----------------------------------------
1. String 문자열 데이터 Json Object 형식으로 변경 가능 한지 체크 실시
// -----------------------------------------
2. 호출 방법 :
let jsonData = "{\n" +
" \"name\" : \"투케이\",\n" +
" \"age\" : 29,\n" +
" \"color\" : [\"red\", \"yellow\"]\n" +
"}";
C_Util().stringJsonObjectEnable(str: jsonData)
// -----------------------------------------
3. 리턴 반환 : Json Object 형식으로 변경 가능한 경우 true / 아닌 경우 false
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = false
// [인풋 데이터 널 체크 수행 실시]
if str != nil
&& str.count>0
&& str != ""
&& str.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& str.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& str.isEmpty == false {
// [딕셔너리 객체 생성 실시 및 json 데이터 받음]
var jsonObj : Dictionary<String, Any> = [String : Any]()
do {
// [딕셔너리에 데이터 저장 실시]
jsonObj = try JSONSerialization.jsonObject(with: Data(str.utf8), options: []) as! [String:Any]
// [리턴 결과 삽입 실시]
returnData = true
} catch {
print("")
print("====================================")
print("[C_Util >> stringJsonObjectEnable() :: string 문자열 데이터 Json Object 형식으로 변경 가능 한지 체크 실시]")
print("-------------------------------")
print("catch :: ", error.localizedDescription)
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> stringJsonObjectEnable() :: string 문자열 데이터 Json Object 형식으로 변경 가능 한지 체크 실시]")
print("-------------------------------")
print("input :: \(str)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [딕셔너리 데이터를 Json Object 형식 문자열로 변환 수행 실시]
@objc func dic_To_JsonObject_String(_dicData:Dictionary<String, Any>) -> String {
/*
// -----------------------------------------
[dic_To_JsonObject_String 메소드 설명]
// -----------------------------------------
1. 딕셔너리 데이터를 Json Object 형식 문자열로 변환 수행 실시
// -----------------------------------------
2. 호출 방법 :
let dic_1 : Dictionary<String, Any> = ["name":"투케이", "age":29] // [딕셔너리]
C_Util().dic_To_JsonObject_String(_dicData: dic_1)
// -----------------------------------------
3. 리턴 반환 : Json Object 형식 문자열
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if _dicData != nil
&& _dicData.count>0
&& _dicData.isEmpty == false {
// [딕셔너리 데이터를 json 으로 변경 실시]
do {
let jsonCreate = try JSONSerialization.data(withJSONObject: _dicData, options: .prettyPrinted)
// [json 데이터를 리턴 변수에 삽입 실시]
returnData = String(data: jsonCreate, encoding: .utf8) ?? ""
} catch {
print("")
print("====================================")
print("[C_Util >> dic_To_JsonObject_String() :: 딕셔너리 데이터를 Json Object 형식 문자열로 변환 실시]")
print("-------------------------------")
print("catch :: ", error.localizedDescription)
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> dic_To_JsonObject_String() :: 딕셔너리 데이터를 Json Object 형식 문자열로 변환 실시]")
print("-------------------------------")
print("input [_dicData] :: \(_dicData.description)")
print("-------------------------------")
print("return [Json String] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [Json Object 형식 문자열을 딕셔너리로 변환 수행 실시]
@objc func jsonObject_To_Dic(jsonString: String) -> Dictionary<String, Any> {
/*
// -----------------------------------------
[jsonObject_To_Dic 메소드 설명]
// -----------------------------------------
1. Json Object 형식 문자열을 딕셔너리로 변환 수행 실시
// -----------------------------------------
2. 호출 방법 :
let jsonData = "{\n" +
" \"name\" : \"투케이\",\n" +
" \"age\" : 29,\n" +
" \"color\" : [\"red\", \"yellow\"]\n" +
"}";
let dicData : Dictionary<String, Any> = C_Util().jsonObject_To_Dic(jsonString: jsonData)
// -----------------------------------------
3. 리턴 반환 : 딕셔너리 데이터 반환
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData : Dictionary<String, Any> = [String : Any]()
// [인풋 데이터 널 체크 수행 실시]
if jsonString != nil
&& jsonString.count>0
&& jsonString != ""
&& jsonString.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& jsonString.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& jsonString.isEmpty == false {
// [딕셔너리 데이터 변환 수행 실시]
do {
let dicCreate = try JSONSerialization.jsonObject(with: Data(jsonString.utf8), options: []) as! [String:Any]
// [리턴 변수에 삽입 실시]
returnData = dicCreate
} catch {
print("")
print("====================================")
print("[C_Util >> jsonObject_To_Dic() :: Json Object 형식 문자열을 딕셔너리로 변환 수행 실시]")
print("-------------------------------")
print("catch :: ", error.localizedDescription)
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> jsonObject_To_Dic() :: Json Object 형식 문자열을 딕셔너리로 변환 수행 실시]")
print("-------------------------------")
print("input [jsonString] :: \(jsonString)")
print("-------------------------------")
print("return [Dictionary] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [html 태그 제거 및 리턴 문자열 반환 메소드]
@objc func htmlTagRemoveString(_data:String) -> String {
/*
// -----------------------------------------
[htmlTagRemoveString 메소드 설명]
// -----------------------------------------
1. html 태그 제거 및 리턴 문자열 반환 메소드
// -----------------------------------------
2. 호출 방법 :
let data = "<p>test url</p><p><a href="https://www.naver.com">https://www.naver.com</a></p><p>&nbsp;</p><p>입니다</p><p>&nbsp;</p>";
C_Util().htmlTagRemoveString(_data: data)
// -----------------------------------------
3. 리턴 반환 : html 태그 제거 문자열 데이터
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if _data != nil
&& _data.count>0
&& _data != ""
&& _data.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& _data.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& _data.isEmpty == false {
guard let encodedData = _data.data(using: .utf8)
else {
print("")
print("====================================")
print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
print("-------------------------------")
print("error [1] :: data 변환 에러")
print("====================================")
print("")
return returnData
}
// [html 태그를 제거 하기 위해 옵션 설정 실시]
let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue
]
do {
// [html 태그 1차 제거 실시]
let attributed = try NSAttributedString(data: encodedData,
options: options,
documentAttributes: nil)
returnData = attributed.string
// [html 태그 2차 제거 실시]
var checkCount = 0;
for i in stride(from: 0, through: returnData.count-1, by: 1) {
let charIndex = returnData.index(returnData.startIndex, offsetBy: i)
if returnData[charIndex] == "&" {
checkCount = checkCount + 1 // [카운트 증가 실시]
}
}
if checkCount > 0 {
for k in stride(from: 0, through: checkCount-1, by: 1) {
guard let encodedData = returnData.data(using: .utf8)
else {
print("")
print("====================================")
print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
print("-------------------------------")
print("error [2] :: data 변환 에러")
print("====================================")
print("")
return returnData
}
do {
let attributed = try NSAttributedString(data: encodedData,
options: options,
documentAttributes: nil)
returnData = attributed.string
}
catch {
print("")
print("====================================")
print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
print("-------------------------------")
print("catch [2] :: \(error.localizedDescription)")
print("====================================")
print("")
}
}
}
// [문자열 연속 공백 제거 실시]
var str_array = Array(returnData)
var remove_array : Array<Int> = []
var nullCheck = 0
for j in stride(from: 0, through: str_array.count-1, by: 1) {
if j != str_array.count-1 {
var first = str_array[j].description.replacingOccurrences(of: " ", with: "")
first = first.trimmingCharacters(in: .whitespacesAndNewlines)
var second = str_array[j+1].description.replacingOccurrences(of: " ", with: "")
second = second.trimmingCharacters(in: .whitespacesAndNewlines)
if first.count == 0 && second.count == 0 {
remove_array.append(j)
}
}
}
if remove_array != nil && remove_array.count>0 && remove_array.isEmpty == false {
for k in stride(from: 0, through: remove_array.count-1, by: 1){
str_array.remove(at: remove_array[k]-k) // [한개씩 배열데이터를 삭제할 때 마다 인덱스 값을 맞추기 위함]
}
}
returnData = ""
for v in stride(from: 0, through: str_array.count-1, by: 1){
returnData = returnData + String(describing: str_array[v])
}
// [문자열 양쪽 끝 공백 제거 실시]
returnData = returnData.trimmingCharacters(in: .whitespacesAndNewlines)
}
catch {
print("")
print("====================================")
print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 에러]")
print("-------------------------------")
print("catch [1] :: \(error.localizedDescription)")
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> htmlTagRemoveString() :: html 형식 태그 제거 문자열 데이터 반환 실시]")
print("-------------------------------")
print("input :: \(_data)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [String to Byte (Data) 변환 수행 메소드]
@objc func stringToByte(string: String) -> Data {
/*
// -----------------------------------------
[stringToByte 메소드 설명]
// -----------------------------------------
1. string 문자열 데이터를 byte (data) 값으로 반환
// -----------------------------------------
2. 호출 방법 : C_Util().stringToByte(string: "hello")
// -----------------------------------------
3. 리턴 반환 : Data 값 반환 실시
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData : Data = Data()
var byteStr = ""
// [인풋 데이터 널 체크 수행 실시]
if string != nil
&& string.count>0
&& string != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& string.isEmpty == false {
// [리턴 변수에 삽입 실시]
returnData = string.data(using: .utf8)!
// [바이트 배열 값 확인 실시]
byteStr = "["
for i in stride(from: 0, through: returnData.count-1, by: 1) {
byteStr += String(describing: returnData[i]) // [개별 바이트 값을 삽입]
if i != returnData.count-1 { // [배열 형태로 찍기 위함]
byteStr += ", "
}
}
byteStr += "]"
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> stringToByte() :: string 문자열 데이터를 byte (data) 값으로 반환 실시]")
print("-------------------------------")
print("input :: \(string)")
print("-------------------------------")
print("return [length] :: \(returnData)")
print("-------------------------------")
print("return [data] :: \(byteStr)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [Byte (Data) To String 변환 수행 메소드]
@objc func byteToString(data: Data) -> String {
/*
// -----------------------------------------
[byteToString 메소드 설명]
// -----------------------------------------
1. Byte (Data) 데이터를 String 값으로 반환
// -----------------------------------------
2. 호출 방법 :
var dataValue : Data = Data()
dataValue.append(104)
dataValue.append(101)
dataValue.append(108)
dataValue.append(108)
dataValue.append(111)
C_Util().byteToString(data: dataValue)
// -----------------------------------------
3. 리턴 반환 : String 값 반환 실시
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
var byteStr = ""
// [인풋 데이터 널 체크 수행 실시]
if data != nil
&& data.count>0
&& data.isEmpty == false {
// [리턴 변수에 삽입 실시]
returnData = String(decoding: data, as: UTF8.self)
// [바이트 배열 값 확인 실시]
byteStr = "["
for i in stride(from: 0, through: data.count-1, by: 1) {
byteStr += String(describing: data[i]) // [개별 바이트 값을 삽입]
if i != returnData.count-1 { // [배열 형태로 찍기 위함]
byteStr += ", "
}
}
byteStr += "]"
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> byteToString() :: Byte (Data) 데이터를 String 값으로 반환 실시]")
print("-------------------------------")
print("input [length] :: \(data)")
print("-------------------------------")
print("input [byte] :: \(byteStr)")
print("-------------------------------")
print("return [string] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [특정 문자 개수 값 반환 메소드]
@objc func charCount(string: String, char: String) -> Int {
/*
// -----------------------------------------
[charCount 메소드 설명]
// -----------------------------------------
1. 특정 문자 개수 값 반환
// -----------------------------------------
2. 호출 방법 : C_Util().charCount(string: "hello,Twok,투케이", char: ",")
// -----------------------------------------
3. 리턴 반환 : 특정 문자 개수 int 값 반환
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = 0
// [인풋 데이터 널 체크 수행 실시]
if string != nil
&& string.count>0
&& string != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& string.isEmpty == false
&& char != nil
&& char.count == 1
&& char != ""
&& char.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& char.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& char.isEmpty == false {
let array = Array(string)
// [for 문을 돌면서 특정 문자 포함 확인]
for i in stride(from: 0, through: array.count-1, by: 1) {
if String(describing: array[i]) == String(describing: char) {
// [리턴 변수에 삽입 실시]
returnData = returnData + 1
}
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> charCount() :: 특정 문자 개수 값 반환 실시]")
print("-------------------------------")
print("input [string] :: \(string)")
print("-------------------------------")
print("input [char] :: \(char)")
print("-------------------------------")
print("return [count] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [배열 중복 데이터 제거 메소드]
@objc func removeArrayStringOverlap(array: Array<String>) -> Array<String> {
/*
// -----------------------------------------
[removeArrayStringOverlap 메소드 설명]
// -----------------------------------------
1. 배열 중복 데이터 제거 메소드
// -----------------------------------------
2. 호출 방법 :
var strArray : Array<String> = []
strArray.append("하나")
strArray.append("둘")
strArray.append("하나")
C_Util().removeArrayStringOverlap(array: strArray)
// -----------------------------------------
3. 리턴 반환 : 중복 제거된 배열 데이터 반환 실시
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnArray : Array<String> = []
// [인풋 데이터 널 체크 수행 실시]
if array != nil
&& array.count>0
&& array.isEmpty == false {
do {
// [Set 을 사용해 Array 배열 중복 데이터 제거 실시]
let arraySet : Set<String> = Set(array)
// [Set to Array 변환 수행 실시]
returnArray = Array(arraySet)
}
catch {
print("")
print("====================================")
print("[C_Util >> removeArrayStringOverlap() :: Array<String> 베열 중복 데이터 제거 실시]")
print("-------------------------------")
print("error :: \(error.localizedDescription)")
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> removeArrayStringOverlap() :: Array<String> 베열 중복 데이터 제거 실시]")
print("-------------------------------")
print("input :: \(array.description)")
print("-------------------------------")
print("return :: \(returnArray.description)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnArray
}
// MARK: - [String 문자열 데이터가 모두 정수 값으로 구성되어 있는지 확인 실시]
@objc func stringIsNumber(string: String) -> Bool {
/*
// -----------------------------------------
[stringIsNumber 메소드 설명]
// -----------------------------------------
1. String 문자열 데이터가 모두 정수 값으로 구성되어 있는지 확인 실시
// -----------------------------------------
2. 호출 방법 :
C_Util().stringIsNumber(string: "12345")
C_Util().stringIsNumber(string: "-12345")
C_Util().stringIsNumber(string: "123hello")
// -----------------------------------------
3. 리턴 반환 : string 문자열 데이터가 모두 정수값으로 된 경우 true / 아니면 false
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = true
// [인풋 데이터 널 체크 수행 실시]
if string != nil
&& string.count>0
&& string != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& string.isEmpty == false {
// [isNumber 사용해 정수값 체크 실시]
var count = 0
for _char in string {
if _char.isNumber == true { // [정수 값 인 경우]
}
else { // [정수 값이 아닌 경우]
if count == 0 && _char == "-" || _char == "+" { // [처음 문자가 - , + 인 경우는 통과 실시]
}
else {
// [리턴 변수에 삽입 실시]
returnData = false
}
}
count = count + 1
}
}
else {
// [리턴 변수에 삽입 실시]
returnData = false
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> stringIsNumber() :: string 문자열 데이터 모두 정수 값 구성 여부 확인 실시]")
print("-------------------------------")
print("input :: \(string)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [Data 를 Byte 바이트 값 문자열로 리턴 실시]
@objc func dataToByteString(data: Data) -> String {
/*
// -----------------------------------------
[dataToByteString 메소드 설명]
// -----------------------------------------
1. Data 를 Byte 바이트 값 문자열로 리턴 실시
// -----------------------------------------
2. 호출 방법 :
var dataValue : Data = Data()
dataValue.append(104)
dataValue.append(101)
dataValue.append(108)
dataValue.append(108)
dataValue.append(111)
C_Util().dataToByteString(data: dataValue)
// -----------------------------------------
3. 리턴 반환 : [104, 101, 108, 108, 111] 배열 형태 문자열
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if data != nil
&& data.count>0
&& data.isEmpty == false {
// [바이트 배열 값 확인 실시]
returnData = "["
for i in stride(from: 0, through: data.count-1, by: 1) {
returnData += String(describing: data[i]) // [개별 바이트 값을 삽입]
if i != data.count-1 { // [배열 형태로 찍기 위함]
returnData += ", "
}
}
returnData += "]"
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> dataToByteString() :: Data 를 Byte 바이트 값 문자열로 리턴 실시]")
print("-------------------------------")
print("input [length] :: \(data)")
print("-------------------------------")
print("return [string] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]
@objc func doubleCutLength(double: Double, length: Int) -> String {
/*
// -----------------------------------------
[doubleCutLength 메소드 설명]
// -----------------------------------------
1. Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시
// -----------------------------------------
2. 호출 방법 :
C_Util().doubleCutLength(double: 123.4567, length: 2)
C_Util().doubleCutLength(double: -123.4567, length: 2)
// -----------------------------------------
3. 리턴 반환 : 123.45 : 소수점 특정 자릿수 기준 제한 문자열 데이터
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if double != nil
&& length != nil
&& length >= 0 {
// [인풋으로 들어온 double 데이터 확인 실시]
var strData = String(describing: double)
var strArray = Array(strData)
// [마이너스 값 체크 여부 플래스 정의]
var checkMinus = false
// [마이너스 데이터 값 체크 실시]
if strArray[0] == "-" {
checkMinus = true // [마이너스 시작 플래스 설정]
}
// [마이너스로 시작하는 경우]
if checkMinus == true {
strArray.remove(at: 0)
}
// [배열 데이터 값을 string 변환 실시]
strData = ""
for j in stride(from: 0, through: strArray.count-1, by: 1) {
strData = strData + strArray[j].description
}
// [for 문을 돌면서 . 점 개수 카운트 및 위치 확인 실시]
var dotCount = 0
var dotLocation = 0
var dotLength = 0
for i in stride(from: 0, through: strArray.count-1, by: 1) {
if strArray[i] == "." {
dotCount = dotCount + 1 // [. 점 개수 카운트 증가]
dotLocation = i // [점 위치값 지정 실시]
dotLength = strArray.count - (i + 1) // [소수점 이하 자리수 카운트 개수 확인]
}
}
/*
print("")
print("====================================")
print("[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
print("-------------------------------")
print("checkMinus [마이너스 값 여부] :: \(checkMinus)")
print("-------------------------------")
print("dotCount [점 개수] :: \(dotCount)")
print("-------------------------------")
print("dotLocation [점 위치] :: \(dotLocation)")
print("-------------------------------")
print("formatStrData [포맷 데이터] :: \(strData)")
print("====================================")
print("")
// */
// [점 개수 값을 확인해서 포맷 수행 실시]
if dotCount == 1 {
// [위치 값 재조절 실시]
dotLocation = dotLocation + length
// [NumberFomatter 을 사용해서 특정 자릿수 기준으로 포맷 실시]
let numberFomatter = NumberFormatter() // NumberFormatter 객체 생성
numberFomatter.roundingMode = .floor // 특정 자릿수 기준으로 버림 설정
numberFomatter.maximumSignificantDigits = dotLocation // 자르기를 원하는 자릿수 지정 실시
// [리턴 결과 변수에 삽입 실시]
returnData = numberFomatter.string(for: Double(strData) ?? 0)!
if checkMinus == true { // 마이너스 기호인 경우 최종 부호 추가
returnData = "-" + returnData
}
// [원본 데이터보다 더 많은 수 자리를 지정한 경우 0 으로 채움]
/*
print("")
print("====================================")
print("[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
print("-------------------------------")
print("소수점 이하 개수 :: \(dotLength)")
print("-------------------------------")
print("자르려는 소수점 자릿수 :: \(length)")
print("====================================")
print("")
// */
if length > dotLength {
let zeroCount = length - dotLength
for k in stride(from: 0, through: zeroCount-1, by: 1){
returnData = returnData + "0"
}
}
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> doubleCutLength() :: Double 소수점 데이터를 특정 소수점 자릿수 기준으로 자르기 실시]")
print("-------------------------------")
print("input [double] :: \(double)")
print("-------------------------------")
print("input [length] :: \(length)")
print("-------------------------------")
print("return [string] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [인풋으로 들어온 배열 데이터 중 부분 배열 데이터 반환 실시]
@objc func arraySubList(list: Array<Any>, startIdx: Int, endIdx: Int) -> Array<Any> {
/*
// -----------------------------------------
[arraySubList 메소드 설명]
// -----------------------------------------
1. 인풋으로 들어온 배열 데이터 중 부분 배열 데이터 반환 실시
// -----------------------------------------
2. 호출 방법 :
// [배열 선언]
var anyArray : Array<Any> = []
// [배열에 데이터 삽입 실시]
anyArray.append("하나")
anyArray.append("둘")
anyArray.append("셋")
anyArray.append("넷")
anyArray.append("다섯")
// [유틸 파일 호출]
C_Util().arraySubList(list: anyArray, startIdx: 0, endIdx: anyArray.count-1) // [배열 전체 데이터]
C_Util().arraySubList(list: anyArray, startIdx: 1, endIdx: 3) // [배열 부분 데이터 : 1, 2, 3 인덱스 데이터 출력]
// -----------------------------------------
3. 리턴 반환 : [하나, 둘, 셋, 넷, 다섯] / [둘, 셋, 넷]
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData : Array<Any> = []
// [인풋 데이터 널 체크 수행 실시]
if list != nil && list.count>0 && list.isEmpty == false
&& startIdx >= 0 && startIdx <= endIdx
&& endIdx >= 0 && endIdx >= startIdx {
// [부분 데이터 범위 지정]
let subList = list[startIdx ..< (endIdx+1)]
/*
print("")
print("====================================")
print("[C_Util >> arraySubList() :: Array 부분 배열 데이터 반환 실시]")
print("-------------------------------")
print("input [list] :: \(list.description)")
print("input [startIdx] :: \(startIdx)")
print("input [endIdx] :: \(endIdx)")
print("-------------------------------")
print("subList [length] :: \(subList.count)")
print("subList [list] :: \(subList)")
print("====================================")
print("")
// */
// [리턴 변수에 삽입]
for i in stride(from: startIdx, through: endIdx, by: 1) {
returnData.append(subList[i])
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> arraySubList() :: Array 부분 배열 데이터 반환 실시]")
print("-------------------------------")
print("input [list] :: \(list.description)")
print("input [startIdx] :: \(startIdx)")
print("input [endIdx] :: \(endIdx)")
print("-------------------------------")
print("return [length] :: \(returnData.count)")
print("return [list] :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
@objc func getNowKorDate24() -> String {
/*
// -----------------------------------------
[getNowKorDate24 메소드 설명]
// -----------------------------------------
1. 한국 시간 대로 24 시간 설정을 맞춰서 날짜 및 시간 데이터 반환
// -----------------------------------------
2. 호출 방법 : C_Util().getNowKorDate24()
// -----------------------------------------
3. 리턴 반환 : 20220413155123
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [한국 날짜 및 시간 데이터 반환 실시]
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMddHHmmss" // 24 시간 대 설정
formatter.locale = Locale(identifier: "ko_kr") // 한국 시간 지정
formatter.timeZone = TimeZone(abbreviation: "KST") // 한국 시간대 지정
// [리턴 변수에 삽입 실시]
returnData = formatter.string(from: date) // string 형태
// [리턴 데이터가 모두 숫자로 구성되었는지 확인 실시]
var notNumber = false
for _char in returnData {
if _char.isNumber == false { // 정수 값이 아닌 경우
notNumber = true
}
}
if notNumber == true {
print("")
print("====================================")
print("[C_Util >> getNowKorDate24() :: 한국 시간 대로 24 시간 설정을 맞춰서 날짜 및 시간 데이터 반환]")
print("-------------------------------")
print("returnData :: \(returnData)")
print("-------------------------------")
print("notNumber :: \(notNumber)")
print("-------------------------------")
print("error :: 모두 숫자로 구성되어있지 않음")
print("====================================")
print("")
// [리턴 데이터 초기화]
returnData = ""
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> getNowKorDate24() :: 한국 시간 대로 24 시간 설정을 맞춰서 날짜 및 시간 데이터 반환]")
print("-------------------------------")
print("returnData [데이터] :: \(returnData)")
print("-------------------------------")
print("returnData [길이] :: \(returnData.count)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [배열 + 딕셔너리 데이터를 JsonArray + JsonObject 형태 String 문자열 데이터 반환 실시]
@objc func arrayDic_To_jsonArrayInJsonObj_String(list: Array<Any>) -> String {
/*
// -----------------------------------------
[arrayDic_To_jsonArrayInJsonObj_String 메소드 설명]
// -----------------------------------------
1. 배열 + 딕셔너리 데이터를 JsonArray + JsonObject 형태 String 문자열 데이터 반환 실시
// -----------------------------------------
2. 호출 방법 :
// [배열 선언]
var anyArray : Array<Any> = []
// [딕셔너리 선언]
var dicData : Dictionary<String, Any> = [String : Any]()
dicData["name"] = "TWOK"
dicData["age"] = 29
// [배열에 딕셔너리 객체 삽입 실시]
anyArray.append(dicData)
// [유틸 파일 호출 실시]
C_Util().arrayDic_To_jsonArrayInJsonObj_String(list: anyArray)
// -----------------------------------------
3. 리턴 반환 :
return :: [
{
"age" : 29,
"name" : "TWOK"
}
]
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if list != nil && list.count>0 && list.isEmpty == false {
do {
// [json 데이터 생성 실시]
let jsonCreate = try JSONSerialization.data(withJSONObject: list, options: .prettyPrinted)
returnData = String(data: jsonCreate, encoding: .utf8) ?? ""
} catch {
print("")
print("====================================")
print("[C_Util >> arrayDic_To_jsonArrayInJsonObj_String() :: [배열 + 딕셔너리] >> [JsonArray + JsonObject] 형태 String 문자열 반환]")
print("-------------------------------")
print("catch :: \(error.localizedDescription)")
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> arrayDic_To_jsonArrayInJsonObj_String() :: [배열 + 딕셔너리] >> [JsonArray + JsonObject] 형태 String 문자열 반환]")
print("-------------------------------")
print("input :: \(list.description)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [JsonArray + JsonObject 형태 String 데이터를 배열 + 딕셔너리 데이터로 반환 실시]
@objc func jsonArrayInJsonObj_To_arrayDic(string: String) -> Array<Dictionary<String, Any>> {
/*
// -----------------------------------------
[jsonArrayInJsonObj_To_arrayDic 메소드 설명]
// -----------------------------------------
1. JsonArray + JsonObject 형태 String 데이터를 배열 + 딕셔너리 데이터로 반환 실시
// -----------------------------------------
2. 호출 방법 :
// [jsonArray 형식 문자열 선언 실시]
let jsonArrayString = "[\n" +
" {\n" +
" \"age\" : 29,\n" +
" \"name\" : \"TWOK\"\n" +
" }\n" +
"]"
// [유틸 파일 호출 실시]
C_Util().jsonArrayInJsonObj_To_arrayDic(string: jsonArrayString)
// -----------------------------------------
3. 리턴 반환 :
return :: [["name": TWOK, "age": 29]]
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData : Array<Dictionary<String, Any>> = []
// [인풋 데이터 널 체크 수행 실시]
if string != nil
&& string.count>0
&& string != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != ""
&& string.trimmingCharacters(in: .whitespacesAndNewlines) != "null"
&& string.isEmpty == false {
do {
// [jsonArray - jsonObject 형식 데이터를 Array 와 Dictionary 사용해서 받음]
returnData = try JSONSerialization.jsonObject(with: Data(string.utf8), options: []) as! Array<Dictionary<String, Any>>
}
catch {
print("")
print("====================================")
print("[C_Util >> jsonArrayInJsonObj_To_arrayDic() :: [JsonArray + JsonObject] 형태 String 데이터를 [배열 + 딕셔너리] 데이터로 반환]")
print("-------------------------------")
print("catch :: \(error.localizedDescription)")
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> jsonArrayInJsonObj_To_arrayDic() :: [JsonArray + JsonObject] 형태 String 데이터를 [배열 + 딕셔너리] 데이터로 반환]")
print("-------------------------------")
print("input :: \(string)")
print("-------------------------------")
print("return :: \(returnData.description)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [Array 배열 데이터 교집합 수행 실시]
@objc func arrayIntersect(array_1:Array<Any>, array_2:Array<Any>) -> Array<Any> {
/*
// -----------------------------------------
[arrayIntersect 메소드 설명]
// -----------------------------------------
1. Array 배열 데이터 교집합 수행 실시
// -----------------------------------------
2. 호출 방법 :
var anyArray_1 : Array<Any> = []
anyArray_1.append("하나")
anyArray_1.append("둘")
anyArray_1.append("셋")
var anyArray_2 : Array<Any> = []
anyArray_2.append("둘")
anyArray_2.append("셋")
anyArray_2.append("넷")
C_Util().arrayIntersect(array_1: anyArray_1, array_2: anyArray_2)
// -----------------------------------------
3. 리턴 반환 :
return :: ["둘", "셋"]
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData : Array<Any> = []
// [인풋 데이터 널 체크 수행 실시]
if array_1 != nil
&& array_1.count>0
&& array_1.isEmpty == false
&& array_2 != nil
&& array_2.count>0
&& array_2.isEmpty == false {
///*
// [for 문을 사용해서 일치하는 데이터 확인 실시]
for i in stride(from: 0, through: array_1.count-1, by: 1) {
for j in stride(from: 0, through: array_2.count-1, by: 1) {
if String(describing: array_1[i]) == String(describing: array_2[j]) {
// [리턴 배열에 삽입 실시]
returnData.append(array_1[i])
}
}
}
// */
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> arrayIntersect() :: Array 배열 데이터 교집합 수행 실시]")
print("-------------------------------")
print("input [array_1] :: \(array_1.description)")
print("-------------------------------")
print("input [array_2] :: \(array_2.description)")
print("-------------------------------")
print("return :: \(returnData.description)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시]
@objc func stringIsUrlParsing(string: String) -> Bool {
/*
// -----------------------------------------
[stringIsUrlParsing 메소드 설명]
// -----------------------------------------
1. String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시
// -----------------------------------------
2. 호출 방법 :
C_Util().stringIsUrlParsing(string: "https://www.naver.com") // [변경 가능]
C_Util().stringIsUrlParsing(string: "http://www.test.app?key=1234") // [변경 가능]
C_Util().stringIsUrlParsing(string: "http://www.test.app?key=yHfsatdJyL\r\n") // [변경 불가 : 엔터 값]
// -----------------------------------------
3. 리턴 반환 : URL 형식으로 변환 가능한 경우 true / 아니면 false 리턴
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = false
// [인풋 데이터 널 체크 수행 실시]
if string != nil
&& string.count>0
&& string != ""
&& string != "null"
&& string.isEmpty == false {
// [URL 타입 선언 확인 실시]
do {
if let url = URL(string: string) { // [웹뷰 로드 주소 URL 체크]
let request = URLRequest(url: url) // [URLRequest 로 정상 변환 가능한지 확인]
// [리턴 변수에 삽입 실시]
returnData = true
}
else {
// [리턴 변수에 삽입 실시]
returnData = false
}
}
catch {
print("")
print("====================================")
print("[C_Util >> stringIsUrlParsing() :: String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시]")
print("-------------------------------")
print("catch :: \(error.localizedDescription)")
print("====================================")
print("")
// [리턴 변수에 삽입 실시]
returnData = false
}
}
else {
// [리턴 변수에 삽입 실시]
returnData = false
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> stringIsUrlParsing() :: String 문자열 데이터가 URL 형식으로 파싱 가능 한지 체크 실시]")
print("-------------------------------")
print("input :: \(string)")
print("-------------------------------")
print("return :: \(returnData)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [배열 데이터에서 한글 데이터 깨지는 것을 막기 위해 배열 전체 데이터 String 으로 인코딩 실시]
@objc func arrayToEncodeString(array:Array<Any>) -> String {
/*
// -----------------------------------------
[arrayToEncodeString 메소드 설명]
// -----------------------------------------
1. 배열 데이터에서 한글 데이터 깨지는 것을 막기 위해 배열 전체 데이터 String 으로 인코딩 실시
// -----------------------------------------
2. 호출 방법 :
NSArray *array = [[NSArray alloc] initWithObjects:@"투케이", @29, nil];
NSString *arrayData = [[C_Util shared] arrayToEncodeStringWithArray:array];
printf("[array data :: %s] \n", arrayData.description.UTF8String);
// -----------------------------------------
3. 리턴 반환 :
[
"투케이",
29
]
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if array != nil
&& array.count>0
&& array.isEmpty == false {
do {
let jsonCreate = try JSONSerialization.data(withJSONObject: array, options: .prettyPrinted)
// [json 데이터를 리턴 변수에 삽입 실시]
returnData = String(data: jsonCreate, encoding: .utf8) ?? ""
} catch {
print("")
print("====================================")
print("[C_Util >> arrayToEncodeString() :: 배열 전체 데이터 String 으로 인코딩 실시]")
print("-------------------------------")
print("catch :: ", error.localizedDescription)
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> arrayToEncodeString() :: 배열 전체 데이터 String 으로 인코딩 실시]")
print("-------------------------------")
print("input :: \(array.description)")
print("-------------------------------")
print("return :: \(returnData.description)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
// MARK: - [딕셔너리 데이터에서 한글 데이터 깨지는 것을 막기 위해 딕셔너리 전체 데이터 String 으로 인코딩 실시]
@objc func dicToEncodeString(dic:Dictionary<String, Any>) -> String {
/*
// -----------------------------------------
[dicToEncodeString 메소드 설명]
// -----------------------------------------
1. 딕셔너리 데이터에서 한글 데이터 깨지는 것을 막기 위해 딕셔너리 전체 데이터 String 으로 인코딩 실시
// -----------------------------------------
2. 호출 방법 :
NSDictionary *dic = @{@"name" : @"투케이", @"age" : @29};
NSString *dicData = [[C_Util shared] dicToEncodeStringWithDic:dic];
printf("[dic data :: %s] \n", dicData.description.UTF8String);
// -----------------------------------------
3. 리턴 반환 :
{
"age" : 29,
"name" : "투케이"
}
// -----------------------------------------
*/
// [초기 리턴 데이터 변수 선언 실시]
var returnData = ""
// [인풋 데이터 널 체크 수행 실시]
if dic != nil
&& dic.count>0
&& dic.isEmpty == false {
do {
let jsonCreate = try JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted)
// [json 데이터를 리턴 변수에 삽입 실시]
returnData = String(data: jsonCreate, encoding: .utf8) ?? ""
} catch {
print("")
print("====================================")
print("[C_Util >> dicToEncodeString() :: 딕셔너리 전체 데이터 String 으로 인코딩 실시]")
print("-------------------------------")
print("catch :: ", error.localizedDescription)
print("====================================")
print("")
}
}
// [로그 출력 실시]
print("")
print("====================================")
print("[C_Util >> dicToEncodeString() :: 딕셔너리 전체 데이터 String 으로 인코딩 실시]")
print("-------------------------------")
print("input :: \(dic.description)")
print("-------------------------------")
print("return :: \(returnData.description)")
print("====================================")
print("")
// [리턴 데이터 반환 실시]
return returnData
}
} // [클래스 종료]
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
57. (TWOK/UTIL) [Ios/Objc] C_Ui_View - 팝업창 표시 , UI 뷰 관련 표시 수행 (0) | 2022.06.24 |
---|---|
56. (TWOK/UTIL) [Ios/Objc] S_Extension - String , Int 등 데이터 타입 extension 정의 파일 (0) | 2022.06.23 |
54. (TWOK/UTIL) [Ios/Objc] S_FinalData - 상수 데이터 관리 클래스 (0) | 2022.06.23 |
53. (TWOK/UTIL) [Ios/Objc] S_Preference - 프리퍼런스 관리 클래스 (0) | 2022.06.23 |
52. (TWOK/UTIL) [Ios/Swift] S_SampleData - 샘플 테스트 데이터 포함 클래스 (0) | 2022.06.13 |
Comments