회사에서 Java 소스코드르 Swift로 변환 중인데
생각보다 많은 부분이 다른거 같아서 제가 알아보는거 공유합니다.
여러분들 검색에 걸리길 바라며...
프로그래밍을 하다보면 특정 배열이나 String을 자르거나 붙힐 필요가 생기기 마련입니다.
데이터를 파싱한다던가 글자를 바꿔줘야 할때 Java 문법을 알고 Swift 문법을 그걸 기반으로 검색을 해봤습니다.
1. JAVA System.arraycopy
아마도 많은 분들이 프로토콜 같은거 파싱할때 많이 쓰이실것 같습니다.
Java
int[] a = { 0, 1, 1, 2, 3, 5, 8, 13 };
int startIndex = 3;
int length = 4;
int[] b = new int[length];
System.arraycopy(a, startIndex, b, 0, length);
// b == { 2, 3, 5, 8 }
Swift
let a = [0, 1, 1, 2, 3, 5, 8, 13]
let startIndex = 3
let length = 4
let b = Array(a[startIndex ..< startIndex+length])
// b == [2, 3, 5, 8]
이 함수는 넣으려는 함수의 특정부분에 넣는것이 안되기 때문에 크기도 그대로 복사되는 문제가 있을 수 있습니다. 중간 index부터 ~까지 하고 싶으면
Swift
buff[0...1] = tempArray[0 ..< 2]
이렇게 작성하면 된다. 역시나 배열의 순서를 이야기하는것이기 때문에 마지막 인자라고 buff.count 이렇게하면 range Exception 이 나온다.
서로 넣을때는 Type을 잘 맞춰서 넣으면 된다. 정말 간단한 방법이지만 Array를 자를때 Array.slice 타입을 주의하며 값을 대입해주면 된다.
2. 문자열 자르기 JAVA .substring
Swift에서 문자열의 특정 요소를 추출할때 index에 Int가 안들어갑니다. String.index 라는 객체를 넣어야합니다.
우리가 제일 잘 알고 있는 String.stratIndex , String.endIndex 등이 있습니다. 하지만 이것으로는 제약이 있고 중간에 있는 값을 알기 위해서는 Range 를 따로 만들어서 넣어주어야 합니다.
쉬운 예제이니 바로 보시면 될 것 같습니다. ( * JAVA가 아닌 Kotlin 입니다. 하지만 함수 사용법은 비슷하니 염두해두고 보시면 됩니다.)
Kotlin
var tempCount = tempString.subString(3,7).toInt
Swift
let strRange = tempString.index(tempString.startIndex, offsetBy: 3) ... tempString.index(tempString.endIndex, offsetBy: 7)
var tempCount = Int(tempString[strRange])
**수정**
새로 생길때 마다 하나씩 추가하겠습니다.
'프로그래밍 > IOS (Swift)' 카테고리의 다른 글
[Swift] NavigationController 사용시 코드로 Navigation Item 수정하기 & Swift 기본 이미지 사용하기(System Image) (0) | 2021.04.01 |
---|---|
[Swift] Cocoapods 이용하여 MAlert 라이브러리 사용하기 (0) | 2021.03.29 |
[Swift] 형 변환 Character to Byte(UInt8) / Byte(UInt8) to Character (0) | 2021.03.26 |
[Swift] Framework (Library) 만들고 프로젝트에 추가하기 (0) | 2021.03.24 |
[Swift] EXC_BAD_ACCESS 에러 해결 (0) | 2021.03.18 |