모바일/iOS

Swift2- Reflection 사용법?

늘근이 2016. 6. 6. 09:40

https://appventure.me/2015/10/24/swift-reflection-api-what-you-can-do/


reflect() 함수는 더이상 신버전 스위프트에서는 쓰이지 않는듯 하다. (다만 언더바를 추가했다능)

갑 애플은 별로 필요가없어지면 메서드를 막 지우고 바꿔버리는듯 하다. 자바에서는 워낙 보수적으로 deprected만 시켜놓고 가만 내두는게 보통인데 애플은 그냥 지네 마음에 안든다고 막 없애버리기 때문에 그전 참조문서도 소용이 없다.

항상이런식으로 갑질을 하는데도 이용자가 욕쟁이 할머니 순대국 마냥 끌려서 쓰는것도 신기하다.

개발자 이름을 법인명으로 하고싶다고 하면 법원에 가서 개발자이름을 법인이름으로 바꾸라고 한다는 인터넷 글도 읽었고 

웹뷰에서 사용하는 서버 기준도 우리 스위프트 버전업 했으니까 너님들이 쓰는 호스팅도 바꿔라

라고 가이드하는것도 너무 웃긴 편..


어쨋든 리플렉션은 아래와 같이 두가지 방향으로 쓸수있는듯하다.

하나는 _reflect  를 쓰는 방법 (과거에  reflect()  함수, 그리고 나머지 하나는  Mirror() 이용방법.

출처 http://stackoverflow.com/questions/25463146/iterate-over-object-class-attributes-in-swift

---------------------------------------------------------------------------------

func print_properties(mirror: _MirrorType) {

    for i in 0..<mirror.count {

        let (name, childMirror) = mirror[i]

        let value = childMirror.value

        print("\(i): \(name) = \(value) ")

    }

}


struct Person {

    let first_name: String

    let last_name: String

    let age: Int

}


let john = Person(first_name:"John", last_name:"Doe", age:27)

let mirror = _reflect(john)

print_properties(mirror)


---------------------------------------------------------------------------------


class People {

    var name = ""

    var last_name = ""

    var age = 0

}


var user = People()

user.name  = "user name"

user.last_name = "user lastname"

user.age = 20


let mirrored_object = Mirror(reflecting: user)


for (index, attr) in mirrored_object.children.enumerate() {

    if let property_name = attr.label as String! {

        print("Attr \(index): \(property_name) = \(attr.value)")

    }

}

---------------------------------------------------------------------------------


_ 프로퍼티를 바꾸는 함수는 코코아 프레임워크를 이용해야 하는것으로 보이고??

함수는 읽기전용인듯 하다. 속성에 접근하여 값을 바꾸려고 하면 다음과 같은 에러가 떨어진다.


cannot assign to property: 'value' is a get-only property


주말 두시간을 날렸기 때문에 허무하게 하드코딩으로 간다..


'모바일 > iOS' 카테고리의 다른 글

Swift2 - Multipart Data send  (0) 2016.06.06
Swift2 - Failed to obtain sandbox extension for  (0) 2016.06.06
[링크] Swift - SQLite 연동  (0) 2016.06.06
[링크] Swift - Online Compiler  (0) 2016.06.06
Swift - NSUnknownKeyException  (0) 2016.06.05