2017년 11월 10일 금요일

iTunes File Sharing (iTunes 파일 공유) @@ in Swift4.0 - Xcode9.0 iOS11

iTunes File Sharing 을 하면 디바이스를 iTunes 와 연결했을때 어플리케이션의 도큐멘트에 접근하여 공유할 수 있는 공유폴더를 사용할 수 있다.



1. info.plist 권한 수정

info.plist를 열어 아래 이미지 처럼 "Application supports iTunes file sharing" 키값을 추가하고
"YES"로 변경합니다. 




2. iPhone을 Mac에 연결하십시오. 아이튠즈 실행 (iPhone에 테스트용 어플리케이션을 설치했는지 확인)

3. 기기를 클릭 한 다음 왼쪽 메뉴 옵션에서 '앱'을 클릭합니다. > 파일 공유 선택하고 드래그하여 파일을 추가

4. 코드를 작성, 디버깅하여 어플리케이션의 도큐멘트에 복사된 파일이 추가 된 것을 확인

<참고 코드>
// 앱 도큐멘트 파일 리스트 확인
let fileManager = FileManager.default
do {
//도큐멘트 파일 경로를 가져옵니다.
let destPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
// 접근한 경로의 디렉토리 내 파일 리스트를 불러옵니다.
let items = try fileManager.contentsOfDirectory(atPath: destPath)
print("Count \(items.count)")
  for item in items {
    print("Found \(item)")
  }
} catch {
  print("Not Found item")
}



2017년 11월 2일 목요일

Property(프로퍼티) - Lazy Stored Properties (지연 저장 프로퍼티) @@ Swift4.0

지연 저장 프로퍼티 (Lazy Stored Properties)

1.정의

지연 저장 프로퍼티(lazy stored property)는 처음 사용 할때 까지 초기 값이 계산되지 않은 프로퍼티 입니다. 지연 저장 프로퍼티는 호출이 있어야 값을 초기화 하며 선언할때 앞에 lazy를 작성하여 나타냅니다.

* 지연 저장 프로퍼티는 인스턴스 초기화가 완료될때까지 초기 값을 가져올 수 없기 때문에, 항상 변수(var키워드 사용)로 선언해야 합니다. 상수 는 인스턴스가 완전히 생성되기 전에 초기화 해야 하므로 필요할때 값을 할당하는 지연 저장 프로퍼티와는 맞지 않습니다.

2.특징

 - 지연 저장 프로퍼티는 주로 복잡한 클래스나 구조체를 구현할 때 많이 사용

 - 외부요인에 의해 초기화가 완료될때가지 값을 알 수 없는 프로퍼티의 값을 초기화 할때 유용

 - 필요한 경우가 아니면 그때까지 수행되서는 안되는 복잡하거나 계산이 오래걸리는 프로퍼티가 필요한 경우 유용

 - 지연 저장 프로퍼티를 잘 사용하면 불필요한 성능저하나 공간 낭비를 줄일 수 있습니다.

<예제코드>

class DataImporter {

  var fileName = "data.txt"

}

class DataManager {

lazy var importer = DataImporter()

var data = [String]()

}

let manager = DataManager()

manager.data.append("Some data")

manager.data.append("Some more data")

// 이 코드를 통해 프로퍼티에 접근할때 importer 프로퍼티의 DataImporter가 생성됨


print(manager.importer.fileName)

주의!
다중 스레드 환경에서 지연 저장 프로퍼티에 동시다발적으로 접근할 때에는 한번만 초기화 된다는 보장이 없습니다. 생성되지 않은 지연저장 프로퍼티에 많은 스레드가 비슷한 시점에 접근한다면, 여러번 초기화 될 수 있습니다.


출처 : 야곰님의 스위프트 프로그래밍
출처 : http://kka7.tistory.com/88

Property(프로퍼티) - Stored Property (저장 프로퍼티) @@ Swift4.0

저장 프로퍼티 

- 구조체 -
struct S_Point {
  var x : Int
  var y : Int
}

// 구조체는 기본적으로 저장 프로퍼티를 매개변수로 갖는 이니셜라이저가 있습니다. 
let testPoint = S_Point(x: 10, y: 10)

- 클래스 -
class Position{
  var point : S_Point // << stored property 'point' without initial value prevents synthesized initializers 컴파일 에러 발생 

  let name : String // << stored property 'name' without initial value prevents synthesized initializers 컴파일 에러 발생

// 프로퍼티 기본값이 지정되어 있지 않다면 이니셜라이저를 따로 정의해주어야 합니다. 정의하지 않으면 위 컴파일 에러 발생 

  init(name : String, currentPoint : S_Point) {
    self.name = name
    self.point = currentPoint
  }
// 이니셜라이저 정의 후 컴파일 에러 사라짐 
}

// 이니셜라이저를 호출함으로써 초기값을 할당해야 인스턴스가 생성됩니다. 
let testPoint2 = Position(name: "tester", currentPoint: testPoint)

구조체는 프로퍼티에 맞는 이니셜라이저를 자동으로 제공하지만 클래스는 그렇지 않습니다. 하지만 클래스의 저장 프로퍼티의 초기값을 지정해주면 따로 이니셜라이저를 구현하지 않아도 됩니다.


class CustomPosition {
  var name : String = "tester" // << 초기값을 지정했기 때문에 이니셜라이저 없어도 컴파일 에러 발생 안함
  var age : Int? // 인스턴스 생성 시 프로퍼티에 값이 필요 없다면 프로퍼티를 옵셔널로 선언가능
}

let customName : CustomPosition = CustomPosition()
print(customName.name) // "tester" 출력
print(customName.age) // "nil" 출력

// 옵셔널 프로퍼티의 값을 알게 되었을때 할당
customName.age = 10
print(customName.age) // "Optional(10)"
print(customName.age!) // 옵셔널 벗기기 "10"

Property(프로퍼티) - 정의, 종류 @@ Swift4.0


1. 정의

프로퍼티 : 클래스, 구조체 또는 열거형 등에 관련된 값을 뜻함
메서드 : 특정타입에 관련된 함수

struct FixedPoint{
  var firstPoint : Int // << 프로퍼티
  let secondPoint : Int
}

var rangePoint = FixedPoint(firstPoint: 10, secondPoint: 10)
rangePoint.firstPoint = 11
// rangePoint.secondPoint = 11  >> 컴파일 에러 (let secondPoint 상수는 값 변경 안됨)

let rangePoint2 = FixedPoint(firstPoint: 20, secondPoint: 20
// rangePoint2.firstPoint = 22 >> 컴파일 에러 ( let rangePoint2 상수는 값 변경 안됨)


2.프로퍼티 종류

 저장 프로퍼티 (Stored Property) : 인스턴스의 변수 또는 상수, 구조체와 클래스에서만 사용가능

 연산 프로퍼티 (Computed Property) : 특정 연산을 실행한 결과값, 클래스, 구조체, 열거형에 사용

 타입 프로퍼티 (Type Property) : 특정타입에 사용

* 프로퍼티 감시자 : 프로퍼티의 값이 변할 때 값의 변화에 따른 특정 액션을 실행합니다.


추천 게시물

애플 개발자 등록방법 2016년 5월 8일 기준!!

애플 개발자 등록 절차 1. 개발자 등록 페이지 이동    애플 개발자 로그인 > Account 페이지 이동 > 하단 영역 클릭 (이미지 참조)   >> Enroll 클릭 >> 무조건 승인!! ...