본문 바로가기

ios

(9)
[SWIFT] 'main' attribute cannot be used in a module contains top-level code xcode 에서 macos cli 어플리케이션을 swift 언어로 생성하고, main.swift 에 다음과 같이 코딩했다.import Foundation@mainstruct cli_test { static func main() async { print("Hello, World!") }}@main 부분에 'main' attribute cannot be used in a moudle that contains top-level code 라는 빨간색 에러 메시지가 떴다.검색하여, main.swift 의 이름을 다른 이름으로 바꾸어 ( myprogram.swift ) 준 이후에 에러가 사라졌다.main.swift 안에 @main 이 오면 이 에러 메시지가 발생한다.https://medium.com/@..
SIL ( Swift Intermediate Language ) 스위프트 중간 언어 스위프트 컴파일러가 .swift 소스파일을 컴파일하는 과정은 스위프트 언어를 스위프트 중간언어(swift intermediate language)로 우선 만들고, 이것을 다시 llvm IR ( intermediate representation ) 으로 바꾸고, 마지막으로 기계어를 생성하는 단계를 거친다. .swift 소스에서 변환된 SIL 을 보려면 swiftc 를 이용하여 -emit-sil 옵션으로 컴파일 하면 된다. swiftc -emit-sil .swift 아주 간단한 Point 스트럭쳐를 선언하여, 이를 sil 로 변환하면 다음과 같다. struct Point { let x:Int let y:Int } struct Point { @_hasStorage let x: Int { get } @_hasS..
SwiftUI] StateObject, Published, ObservableObject https://www.hackingwithswift.com/books/ios-swiftui/sharing-swiftui-state-with-stateobject swiftui 에서 struct 인스턴스 변수는 간단한 @State 로 (내부 프로퍼티의) 변경을 감지하여 UI에 반영할 수 있다. 하지만 class 인스턴스 변수는 @State 를 붙여도 내부 프로퍼티의 변경을 감지하지 못한다. class 의 내부 프로퍼티의 변경을 감지하도록 하는 방법은 다음과 같다. 1. 외부에서 변경을 감지하려는 클래스의 프로퍼티에 @Published 를 붙여준다. class User { @Published var name: String = "Micky" @Published var age: Int = 10 } 2. view..
[유튭링ㅋ] Mastering Concurrency in iOS 인도형의 유튜브 강좌. 발음이 좀 거북하지만, 매우 잘 정리해 준다. Mastering Concurrency in iOS - Part 1 (Concurrency, GCD Basics) https://youtu.be/X9H2M7xMi9E Mastering Concurrency in iOS - Part 2 (Dispatch Queues, Quality of Service, Attributes) https://youtu.be/yH0RBTdNi3U Mastering Concurrency in iOS - Part 3 (Dispatch Group, Dispatch Work Item) https://youtu.be/SGEWlYB6ZM0 Mastering Concurrency in iOS - Part 4 (Dispat..
Cocoa 와 CocoaTouch 의 차이점 Cocoa 는 기본 라이브러리인 Foundation (모든 애플 디바이스 공통)과 데이터베이스 라이브러리인 CoreData와 유저인터페이스 라이브러리인 AppKit 을 포괄하는 상위그룹으로, Mac 프로그래밍을 위한 응용프로그램 환경이다. CocoaTouch 는 나중에 iOS 를 위해 나온 것이고, AppKit 의 자리에 UIKit 을 사용한다. AppKit 의 이름에는 NS 로 시작하는 것이 많고, 이것은 NeXTSTEP 에서 나온 것이다. UIKit 은 애플에서 새롭게 만든 것이라 UI 라는 프리픽스가 붙어있다. 두 프레임워크 간에는 UI와 NS 프리픽스만 다른 유사한 UI엘리멘트들이 있다. ref : MacOS by Tutorial by Sarah Reichelt Raywenderlich
100DaysOfSwiftUI - Day 24 마지막 과제가 아래와 같다. 커스텀 ViewModifier (와 View extension) 을 만드는데, 글씨체를 크고 푸른색으로 만들어 프로미넌트타이틀에 적당하게 바꾸는 모디파이어. Create a custom ViewModifier (and accompanying View extension) that makes a view have a large, blue font suitable for prominent titles in a view. 작성한 코드는 아래와 같다. import SwiftUI struct ProminentTitle : ViewModifier { func body(content: Content) -> some View { content .font(.largeTitle.bold()) ...
100DaysOfSwiftUI - Day 16 WeSplit 첫번째 프로젝트 var body: some View { } 는 swift 문법적으로는 computed property 인 것 같다. @State 를 추가하여, immutable 프로퍼티를 변경이 가능하도록 만들어준다. struct 가 아닌 다른 어느 곳에 저장한다고 하는데... 어딜까. @State 를 추가하지 않고, 버튼핸들러에서 프로퍼티를 변경하려 하면, View 가 immutable 이기 때문에 에러메시지가 발생하는 걸 보여주는 설명이 참 좋았다. 안그랬으면 그냥 그런갑다 하고 넘어갔을 것. https://daewonyoon.tistory.com/440
[Swift] swift 단일 스크립트 파일을 컴파일하기 command line arguments 들을 처리하는 기능을 간단한 .swift 스크립트를 작성하여 테스트하려 했다. 간단한 테스트코드들은 컴파일한 실행파일이 아닌, 스크립트로 형식으로 실행하여 테스트하였었는데, 스크립트로 실행할 때에는, 신경쓰지 않았던 많은 실행인자들이 부가적으로 붙어 있었다. 메인 실행파일도 스크립트파일이 아니었다. 그래서, 스크립트 소스를 컴파일하여 단일 실행파일을 만들 수 있는 방법이 있는지 찾아봤다. 아주 간단하게 가능하다. swiftc my_script.swift -o my_program my_script.swift 파일을 컴파일 하려면, 셸에서 위와 같이 실행하면, my_program 이란 이름의 실행파일이 만들어진다. 컴파일러라서 swift 가 아닌 마지막에 c 자가 붙..