'프로그래밍 > PS' 카테고리의 다른 글

[프로그래머스][LV2] 가장 큰 수  (0) 2021.06.12
[c++][template] quick sort  (0) 2021.06.11
[백준] Class 3 All Solved  (0) 2021.06.03
[백준 12904] A와 B  (0) 2021.05.28
[백준 2109] 순회강연  (0) 2021.05.26

Bring

물건이나 사람을 움직이는것을 뜻한다.

움직임의 방향은 다음과 같다.

  • 화자 -> 청자
  • 청자 -> 화자

In both of the following examples, the speakers are seeing things from A’s viewpoint – things will move to the place where A is:

A: Are you going to the bedroom?

B: Yes.

A: Can you bring me my grey sweater? It’s on the bed.

B: Yeah. (B will return with the sweater to the place where A is.)

Not: Can you take me my grey sweater?

A: Are you coming to our place on Friday night?

B: Yes. Do you want me to bring my guitar? (B will carry the guitar to the place where A will be.)

움직임의 방향이 한 가지 더 있다.

  • 어딘가 다른 곳 -> 청자 / 화자

[on the telephone]

A: Did Laura bring you anything for your birthday?

B: Yes. She brought me some flowers and a CD. (Laura is C, another person, in a different place from A or B. She moved with something to where B, the listener, was.)

Take

역시 물건이나 사람을 움직이는 것을 뜻한다.

움직임의 방향은 다음과 같다.

  • 화자 / 청자 -> 어딘가 다른 곳

[university assistant at a central faculty office, speaking to a student]

You have to fill in this form and then take it to the English Department to get it stamped. (the assistant and the student are at the central faculty office – the English Department is a different place)

Not: … and then bring it to the English Department

A: I can take you to the station tomorrow. What time’s your train? (Neither A nor B is at the station; it is a different place.)

B: Thanks. It’s eight-thirty.

Fetch

역시나 물건이나 사람을 움직이는 것을 뜻하지만, 조금 더 구체적이다.

현재 위치에 있어야 하는데 없을 때 사용한다.

움직임의 방향은 한 종류이다.

  • 현재 위치 -> 목표의 위치 -> 현재 위치

If you’re going to the garage, can you fetch that green bag with the paintbrushes in it? Or Can you get that green bag …

Right. It’s five o’clock. I’d better go and fetch my mother from the station.

Bring, take and fetch: typical error

  • 청자의 시점에 물건이 보일 때는 take를 사용하지 않는다.

A: Are you and Josh coming to our party?

B: Yeah. Sheila invited us.

A: Good. Can you bring some CDs? We’re a bit short of music.

Not: Can you take some CDs?

출처 : https://dictionary.cambridge.org/ko/문법/영국식-문법/bring-take-and-fetch

'프로그래밍' 카테고리의 다른 글

여러가지 연습 사이트  (0) 2021.07.21
[c++] 참조 배열을 인자로 넘기기  (0) 2021.05.28

이 글은 https://sarunw.com/posts/xcode-shortcuts-for-swiftui/ 를 번역해서 작성한 글입니다.

SwiftUI로 개발할 때, 유용한 Xcode 단축키에 대해서 소개해드리겠습니다.

Preview 새로고침

SwiftUI로 개발할 때 편한 기능 중에 하나인 Preivew 기능이 종종 멈출 때가 있습니다.

이럴 때, resume버튼을 눌러줘야만 다시 Priview기능이 동작합니다.

계속해서 resume버튼을 누르는 것은 꽤나 불편한 일입니다. 그래서 단축키를 알아두면 편하게 Preview 기능을 이용할 수 있습니다.

command + option + p
Editor menu > Canvas > Refresh Canvas

Indent 적용

SwiftUI에서는 UIKit으로 개발할 때에 비해서 Indnet(들여쓰기)가 많습니다.

간혹 오타가 한번 생기거나, 자동완성을 잘못 사용했을 때 Indent가 잘못 되는 경우가 있습니다.

하나한 Indent를 수정해주는 것 보다, 단축

키를 사용하면 한번에 Indent를 설정해줄 수 있습니다.

control + i
Editor menu > Structure > Re-Indent

코드 이동하기

SwiftUI에서는 적용해주는 함수(?)의 순서가 중요합니다.

적용순서를 바꾸는것은 동작이나 모습의 변화를 의미합니다.

아래는 그 예시입니다.

Text("SwiftUI")
    .padding()
    .background(Color.yellow)

Text("SwiftUI")
    .background(Color.yellow)
    .padding()

이렇게 SwiftUI에서는 적용 순서가 중요하기 때문에, 한 줄의 코드를 위로, 아래로 옮기는 일이 다분합니다.

command + option + [/]
Editor menu > Structure > Move Line Up

한 줄만 위 아래로 옮기는 것이 아닌, 여러줄을 선택해서 한번에 옮길 수도 있습니다.

간단하게 여러 줄을 선택해서 위의 단축키를 누르면 동일한 방법으로 여러줄의 코드를 이동할 수 있습니다.

SF Symbol

[Apple Developer

There’s never been a better time to develop for Apple platforms.

developer.apple.com](https://developer.apple.com/sf-symbols/)

SF Symbols is a library of iconography designed to integrate seamlessly with San Francisco, the system font for Apple platform

사용

SF Symbols에서 제공하는 이미지를 사용하면 systemName으로 이미지을 불러올 수 있다.

UIImage(systemName: "bicycle.circle")

호환성

하지만 버전별로 지원하는 이미지가 다르므로, 버전별로 대응이 필요하다.

예를 들어서 `bicycle.circle`의 사용 가능 버전은 아래와 같다.

SF Symbols 프로그램에서  검색

극복

원하는 이미지를 검색해서 선택한 뒤, 아래와 같이 템플릿 내보내기버튼을 클릭한다.

Device : 2021 M1 Macbook Pro 16
OS : macOS Monterey (12.0.1)

universalaccessd

universalaccessd의 메모리 점유가 비정상적으로 높아지는 상황이 발생했다.

monterey에서 발생하는 메모리 누수 버그

M1한정인지는 모르겠으나, macOS Monterey에서 발생하는 메모리 누수 버그가 있다.

구글링 해 본 바로는, 특정한 상황에서만 발생하는 메모리 누수 버그였다.

아마 이 글을 찾아보는 분들중에는, 대부분 마우스 커서를 변경했을 것이다. 그것이 아니라면 이 글로는 해결이 되지 않는다.

Monterey의 커서 색상 변경 기능

Monterey에서 새롭게 추가된 기능인 커서 색상 변경은, 메모리 누수 버그의 원인으로 보여진다.

커서 색상설정 리셋

해결 방법은 그저, 커서 색상을 설정했던 곳으로 돌아가 설정을 리셋해주면 된다.

시스템 환경설정 > 손쉬운 사용 > 디스플레이 > 포인터 > 재설정

System Preference > Accessibility > Display > Pointer > Reset

이렇게 생긴 JSON포멧에서 distanceduration만 파싱하려고 한다.

다른 변수들은 모두 필요가 없기 때문에, 저 둘의 상위 변수들에만 접근해서 추출하면 된다.

애플에서 소개된 방법으로는 최상위에서부터 depth를 하나씩 들어가면서 Container를 만들며 접근할 수 있다.

그런데, 상위 변수가 배열 형식일 경우에는 추가적으로 배열의 원소에 접근하는 작업이 필요하다.

검색을 해보면, nested array data, nested array, nested json과 같은 키워드로 결과가 나오는데

그 방법들을 모두 종합해서 가장 간단한 방법으로 구현 해 보았다.

아래 코드에서 보면 featuresContainer에 한번 접근 한 뒤에, 그 내부에서 featureContainer에 접근하는 것을 볼 수 있다.

struct MyORResponse: Decodable {
    let distance: Double?
    let duration: Double?

    init(from decoder: Decoder) throws {
        // 최상위 컨테이너에 접근한다.
        let rootContainer = try decoder.container(keyedBy: RootContainerKeys.self)

        // root > features
        var featuresContainer = try rootContainer.nestedUnkeyedContainer(forKey: .features)

        // root > features > feature
        let featureContainer = try featuresContainer.nestedContainer(keyedBy: FeatureKeys.self)

        // root > features > feature > properties
        let propertiesContainer = try featureContainer.nestedContainer(keyedBy: PropertiesKeys.self.self, forKey: .properties)

        // root > features > feature > properties > summary
        let summaryContainer = try propertiesContainer.nestedContainer(keyedBy: CodingKeys.self, forKey: .summary)


        // root > features > feature > properties > summary > duration, distance
        self.duration = try summaryContainer.decode(Double.self, forKey: .duration)
        self.distance = try summaryContainer.decode(Double.self, forKey: .distance)
    }

    private enum CodingKeys: String, CodingKey {
        case distance
        case duration
    }

    private enum RootContainerKeys: CodingKey {
        case features
    }

    private enum FeatureKeys: CodingKey {
        case properties
    }

    private enum PropertiesKeys: CodingKey {
        case summary
    }
}

위와 같이 모델을 작성한 경우에

let jsonData = """
{
    ...
}
""".data(using: .utf8)!

let result = try JSONDecoder().decode(MYORResponse.self, from: jsonData)

let distance = result.distance
let duration = result.duration

이렇게 디코딩된 객체에서 단번에 접근할 수 있다.

Device : 2021 M1 Macbook Pro 16
OS : macOS Monterey (12.0.1)

맥북에서 워드를 사용할 때, 메모리

MacBook에서 Word프로그램을 사용하다 보면 순식간에 엄청난 메모리를 사용하게 될 수 있다.

아래와 같이 순식간에 64GB가 넘는 메모리를 사용하게 될 수 있다..

이렇게 많은 메모리를 사용하게 되면 어느 순간 응용 프로그램이 예기치 않게 종료 되었습니다라는 오류 문구를 보여주며,

프로그램들이 하나씩 강제 종료된다.

메모리를 많이 사용하는 자동 수정(고침), 맞춤법 및 문법 검사 기능

이 현상의 원인은 바로 Word의 자동 수정(고침) 기능때문이다.

Word를 실행한 상태에서 Command + , 버튼을 동시에 누르면 Word 기본 설정창이 나타난다.
또는, 왼쪽 상단에서 Word > Microsoft Word 정보를 누르면 된다.

맞춤법 및 문법 검사

맞춤법 및 문법 검사를 누르면 아래와 같이 여러 가지 검사 옵션이 있다.

최소한으로 필요한 것들을 제외하고서는 모두 체크 해제해준다.

내 경우에는, Word에서 문서를 작성할 때에는 맞춤법 검사를 하지 않고,

문서 작성이 끝나면, 한꺼번에 맞춤법 검사 사이트에서 검사해준다.

자동 고침

자동 고침을 누르면 아래와 같이 입력할 때 맞춤법 및 서식을 자동으로 고침이 체크되어 있을 것이다.

이 체크를 해제해준다.

마치며

맥북을 사용하는 사람들 중, 워드 작업을 주로 하는 분들도 많이 계실 텐데

위 내용을 따라 해서 메모리 사용을 줄여주면 더 이상 문서 작업할 때, 메모리를 고민할 필요가 없을 것이다.

그리고, 혹시나 웹서핑을 할 때 창을 많이 띄워놓고 사용하는 편이라면, Chrome보다는 Safari를 사용하는 것을 추천한다.

Chrome은 많은 메모리를 사용하기 때문에, 최대한 적은 창을 사용하는 것이 좋다.

11 / 24 (수) 일단 만들면서 해결한 이슈들부터 기록한 뒤, 나중에 완성된 글을 작성할 예정이다.

따릉이 API

API 명세서.

Response 명세는 아래와 같이 나와있다.

하지만 해당 값들이 어떤 타입인지 전혀 나와있지 않다..

출력을 해 보면 아래와 같이 응답이 온다.

응답 결과

응답 결과를 보고 대강 예상해서 모델을 만들어봤을 때는, 아래와 같이 Cnt변수Int 타입으로 만들었다.

이렇게 모델을 만들어 응답 결과를 디코딩 했더니

🥲 외않돼지.. 🥲

열심히 구글링을 하던중에 아래 글을 보게 되었고, 어떤 상황에서 Decoding오류가 발생하는지 알게 되었다.

https://jiseobkim.github.io/swift/2018/07/21/swift-Alamofire와-Codable.html

[Swift - Alamofire와 Codable

나만의 공간

jiseobkim.github.io](https://jiseobkim.github.io/swift/2018/07/21/swift-Alamofire와-Codable.html)

그래서 의심가는것들을 하나씩 바꿔보았고, 원인을 찾을 수 있었다.

Cnt변수들이 모두 String타입이였던 것이다...! 그런데 또, list_total_count변수는 Int타입니다...

완성된 모델

왜.. 이런식으로 변수타입을 설정했는지는 전혀 모르겠지만,, 아무튼 여러 삽질끝에 해결하게 되었다.

`RantalStationInfo`의 Cnt변수들은 왜 `String`으로 설정했고, `list_total_count`변수는 `Int`타입으로 설정했는지 아시는분은 댓글로 꼭 알려주시면 감사하겠습니다,,

'iOS' 카테고리의 다른 글

[Swift] API Response 파싱 / Codable / Nested Array JSON  (0) 2021.11.29

+ Recent posts