본문 바로가기
computing

20250908_iOS_2

by greentworkshop 2025. 9. 8.

1주차 

https://bbiguduk.gitbook.io/swift/language-guide-1/the-basics

 

기본 (The Basics) | Swift

일반적인 종류의 데이터로 동작하고 기본 구문을 작성합니다. Swift는 정수에 사용되는 Int, 부동소수점(floating-point) 값에 사용되는 Double, Boolean 값을 나타내는 Bool, 그리고 텍스트를 나타내는 String

bbiguduk.gitbook.io

shift cmd 3

shift cmd 4 - 선택캡쳐 

shift cmd 4 space - 원하는 브라우저만 캡쳐

필수 암기 키

 

맥북 - flappy bird

물론입니다! 코드 한 줄 한 줄에 주석을 달아서 쉽게 설명해드리겠습니다. 주석을 통해 각 줄의 역할을 자세히 설명해드릴게요.


1. SKNode 확장 (unarchiveFromFile)

 
// SKNode 클래스를 확장하여, .sks 파일을 불러오는 메서드를 추가합니다.
extension SKNode {
    
    // 파일 경로로부터 SKNode 객체를 복원하는 클래스 메서드
    class func unarchiveFromFile(_ file: String) -> SKNode? {
        
        // .sks 파일의 경로를 찾습니다. 
        // Bundle.main.path는 앱의 리소스에서 파일을 찾는 메서드입니다.
        let path = Bundle.main.path(forResource: file, ofType: "sks")
        
        // sceneData는 파일에서 읽어온 데이터를 저장할 변수입니다.
        let sceneData: Data?
        
        // 파일을 읽어오는 데 실패할 수 있기 때문에, do-catch 문을 사용해 오류를 처리합니다.
        do {
            // 파일을 읽어서 sceneData에 저장합니다.
            sceneData = try Data(contentsOf: URL(fileURLWithPath: path!), options: .mappedIfSafe)
        } catch _ {
            // 오류가 발생하면 sceneData는 nil로 설정됩니다.
            sceneData = nil
        }
        
        // Data를 NSKeyedUnarchiver로 복원할 준비를 합니다.
        // NSKeyedUnarchiver는 객체를 디코딩할 때 사용하는 클래스입니다.
        let archiver = NSKeyedUnarchiver(forReadingWith: sceneData!)
        
        // "SKScene" 클래스를 복원할 때 SKNode를 사용할 수 있도록 설정합니다.
        // 이 단계에서 `self.classForKeyedUnarchiver()`는 현재 클래스(SKNode)가 복원될 클래스로 지정됩니다.
        archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
        
        // 복원된 객체를 GameScene으로 캐스팅하여 반환합니다.
        let scene = archiver.decodeObject(forKey: NSKeyedArchiveRootObjectKey) as! GameScene
        
        // 복원 작업을 끝내고 리소스를 정리합니다.
        archiver.finishDecoding()
        
        // 복원된 장면을 반환합니다.
        return scene
    }
}

이 코드의 핵심은 .sks 파일에서 저장된 장면을 복원하는 것입니다. SKNode를 확장하여 게임 장면을 읽고 복원하는 메서드를 작성했습니다.


2. GameViewController 클래스

 
// UIViewController를 상속받은 GameViewController 클래스입니다.
// 이 클래스는 게임 화면을 관리합니다.
class GameViewController: UIViewController {
    
    // 뷰가 로드된 후에 호출됩니다.
    // 게임 화면을 설정하는 코드가 여기에 있습니다.
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // "GameScene"이라는 이름의 .sks 파일을 복원하여 scene에 저장합니다.
        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
            
            // 현재 뷰를 SKView로 캐스팅하여 게임 화면을 설정할 준비를 합니다.
            let skView = self.view as! SKView
            
            // FPS(초당 프레임 수)를 화면에 표시하도록 설정합니다.
            skView.showsFPS = true
            
            // 화면에 표시되는 노드의 개수를 표시하도록 설정합니다.
            skView.showsNodeCount = true
            
            // siblingOrder를 무시하고 렌더링 최적화합니다.
            skView.ignoresSiblingOrder = true
            
            // 화면 크기에 맞게 장면을 자동으로 스케일링합니다.
            // .aspectFill은 화면 비율을 유지하면서 화면을 꽉 채우도록 설정합니다.
            scene.scaleMode = .aspectFill
            
            // 게임 장면을 SKView에 표시합니다.
            skView.presentScene(scene)
        }
    }
}

이 코드의 핵심은 viewDidLoad()에서 게임 장면을 불러와 SKView에 표시하는 것입니다. 게임 장면은 .sks 파일에서 복원되어, SKView에 올바르게 표시됩니다.


3. 기기 회전 및 메모리 관리

 
// 기기가 회전할 때 화면이 자동으로 회전하도록 허용합니다.
override var shouldAutorotate: Bool {
    return true
}

// 어떤 화면 회전 방향을 지원할지 설정합니다.
// iPhone은 상단을 아래로 향한 회전(거꾸로 회전)은 지원하지 않으며,
// iPad는 모든 회전 방향을 지원합니다.
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    if UIDevice.current.userInterfaceIdiom == .phone {
        return UIInterfaceOrientationMask.allButUpsideDown
    } else {
        return UIInterfaceOrientationMask.all
    }
}

// 메모리 경고가 발생했을 때 호출되는 메서드입니다.
// 이 메서드 안에서 사용되지 않는 자원을 해제하여 메모리 문제를 해결할 수 있습니다.
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // 사용하지 않는 데이터나 이미지 등을 해제합니다.
}

이 코드의 핵심은:

  • 기기 회전: 앱이 자동으로 화면 회전을 처리하고, 각 기기(iPhone, iPad)에 따라 회전 방향을 달리 설정합니다.
  • 메모리 경고: 시스템에서 메모리가 부족할 때 불필요한 자원을 해제하는 메서드입니다.

요약

  1. SKNode 확장: .sks 파일에서 게임 장면을 복원하는 메서드를 추가했습니다.
  2. GameViewController 클래스: 게임 장면을 불러와 SKView에 표시하는 역할을 합니다.
  3. 기기 회전 및 메모리 관리: 기기 회전 시 화면을 적절하게 회전시키고, 메모리가 부족할 때 자원을 해제하는 기능을 추가했습니다.

각 줄에 주석을 달아서 코드가 무엇을 하는지 이해하기 쉽게 설명했습니다. Swift와 SpriteKit에 대해 조금 더 친숙해지셨기를 바랍니다!

 

무제.pages
0.07MB

mac 'pages'사용

 


2주차

compiler

https://swiftfiddle.com/

 

Swift Online Playground

SwiftFiddle is an online playground for creating, sharing and embedding Swift fiddles (little Swift programs that run directly in your browser).

swiftfiddle.com

nightly - 검토중인 버전

 

변수 : var, 상수 : let

var myNum : Int = 10

초기값이 존재한다면 명시할 필요X

= 입력시 ' = '양쪽 공백이 반드시 필요(공백의 갯수는 무관)

Red Circle mean error, Red Circle with red dot mean 'I can fix the error!'

 

var a         X

 

var a = 10.   O

 

var a : Int.   O

 

https://developer.apple.com/documentation/swift/print(_:separator:terminator:)

 

print(_:separator:terminator:) | Apple Developer Documentation

Writes the textual representations of the given items into the standard output.

developer.apple.com

문법 참고할 때 알아두면 좋음

 

terminator와 separator는 print() 함수에서 출력 형식을 조정할 수 있게 해주는 매개변수입니다. 이 두 가지를 이해하면 여러 값을 출력할 때 더 유연하게 제어할 수 있습니다.

1. separator (구분자)

  • 설명: 여러 개의 값을 print() 함수로 출력할 때 각 값들 사이를 구분하는 문자입니다. 기본적으로 print()는 각 값 사이를 공백(" ")으로 구분하여 출력하지만, separator를 사용하면 원하는 다른 문자로 값을 구분할 수 있습니다.
  • 기본값: " " (공백)

 

2. terminator (끝 문자를 변경)

  • 설명: print() 함수는 기본적으로 출력 후 자동으로 줄 바꿈을 추가합니다 (\n). 하지만 terminator를 사용하면 줄 바꿈 대신 다른 문자나 문자열을 출력할 수 있습니다.
  • 기본값: "\n" (줄 바꿈)

 

let x = 10

x = 15

 

immutuable(변환 불가능)

 

var y = 10

y = 10

 

mutable(변환 가능)

'computing' 카테고리의 다른 글

20250915_iOS_3  (0) 2025.09.15
20250911_android_2  (0) 2025.09.11
20250904_안드로이드_1  (0) 2025.09.04
20250901 - iOS_1  (0) 2025.09.01
java 코드정리 - default  (0) 2025.06.12