1. 머리말
12월 4일 수요일 새벽 1시쯤에 애플이 공식적으로 스위프트를 오픈하는 걸 봤습니다. 미디어 정보는 매우 빠르게 이동했습니다. 나는 또한 Swift 오픈 소스에 대한 최신 뉴스를 읽고 흥미를 느꼈습니다. 우리 모두 알고 있듯이 Apple 플랫폼용 Swift 언어는 출시된 지 1년 반이 되었으며 여러 버전을 거쳐 성장해 왔습니다. 많은 사람들이 기대하는 Swift의 오픈소스는 이 새로운 언어를 Apple 플랫폼이 아닌 다른 플랫폼에서도 사용할 수 있다는 점입니다. 예를 들어, 미래에 Swift를 사용하거나 백그라운드 개발을 할 수 있기를 희망하는 사람들도 있지만 이론적으로는 문제가 없습니다. 그러나 일단 오픈 소스가 출시되면, 더 많거나 적은 수의 커뮤니티 구성원이 이 측면을 위해 열심히 일할 것입니다. Apple은 Swift를 위한 새로운 웹사이트인 Swift.org를 공식적으로 출시했으며, Ubuntu Linux 플랫폼용으로 사전 컴파일된 Swift 도구 체인 패키징 파일과 Linux용 컴파일 가이드도 공개했습니다. 오늘 이 블로그를 쓰는 목적은 초심자나 중학교 학생들에게 Swift 언어 사용을 소개하고 홍보하는 것입니다.
2. Swift+Ubuntu 환경 구성
우선 우분투 리눅스 운영체제를 설치했다고 가정하고, 설치 과정은 매우 간단합니다. 인터넷의 단계별 튜토리얼 가상 머신의 경우 VirtualBox를 사용하는 것이 좋습니다. Swift는 Ubuntu 14.04와 15.10의 두 가지 버전을 지원합니다. 저는 패키지의 15.10 버전을 선택했습니다.
1단계: Swift 2.2 도구 체인 압축 패키지를 다운로드하고, 터미널을 열고, 명령을 입력하여 새 디렉터리를 생성하고 다운로드합니다.
diveinedu@diveinedu-VirtualBox:~$ mkdir swift && cd swift; diveinedu@diveinedu-VirtualBox:~/swift$ wget https://swift.org/builds/ubuntu1510/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz
2단계: tar 명령을 사용하여 압축을 풉니다. Swift 2.2 도구 체인 압축 패키지 현재 디렉터리로 이동하여 환경 변수
를 구성합니다. 먼저 압축을 풀고 디렉터리에 들어갑니다. 디렉터리 아래에 usr/bin 및 usr/lib와 같은 하위 디렉터리가 있습니다.
diveinedu@diveinedu-VirtualBox:~/swift$ tar xvf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gz diveinedu@diveinedu-VirtualBox:~/swift$ cd swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/
그런 다음 사용자 수준 환경 변수를 구성하고 $HOME/.bashrc 구성 파일을 편집합니다.
diveinedu@diveinedu-VirtualBox:~/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10$ gedit $HOME/.bashrc
위 명령은 그래픽 인터페이스 텍스트 편집기 GEdit를 호출하여 이를 편집합니다. 구성 파일 끝에 다음 구성 줄을 입력하고 저장하고 편집을 종료합니다. 장치
export SWIFT_HOME=$HOME/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10 export PATH=$SWIFT_HOME/usr/bin:$PATH export LD_LIBRARY_PATH=$SWIFT_HOME/usr/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=$SWIFT_HOME/usr/lib:$LIBRARY_PATH
그러면 환경 변수가 정상적으로 구성됩니다. 현재로서는 Shell 터미널을 닫았다가 다시 열면 적용됩니다.
3. Swift+Ubuntu의 첫 경험
iOS 개발을 해본 사람이라면 누구나 2014년 6월 Swift가 처음 탄생했을 때 Xcode와 함께 Playground 기능이 함께 제공되었다는 것을 알고 있을 것입니다. Ubuntu Linux에도 비슷한 것이 있지만 강력한 IDE 지원이 없습니다. 또한 Pyhton 스크립트 파서와 유사한 Swift 파서를 실행하고 "파싱"에 Swift 코드를 입력할 수도 있습니다. "하고 실행해 보세요. 이 명령은 Swift입니다. 위의 환경 변수를 설정한 후 아래와 같이 터미널을 다시 열어서 바로 사용할 수 있습니다.
diveinedu@diveinedu-VirtualBox:~$ swift Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance. 1> let hello = "hello"; hello: String = "hello" 2> let world = "diveinedu" world: String = "diveinedu" 3> let space = " " space: String = " " 4> print(hello+space+world); hello diveinedu 5>hello. Available completions: append(c: Character) -> Void append(x: UnicodeScalar) -> Void appendContentsOf(newElements: S) -> Void appendContentsOf(other: String) -> Void characters: String.CharacterView debugDescription: String endIndex: Index hashValue: Int insert(newElement: Character, atIndex: Index) -> Void insertContentsOf(newElements: S, at: Index) -> Void isEmpty: Bool lowercaseString: String nulTerminatedUTF8: ContiguousArray<CodeUnit> removeAll() -> Void removeAll(keepCapacity: Bool) -> Void removeAtIndex(i: Index) -> Character removeRange(subRange: Range<Index>) -> Void replaceRange(subRange: Range<Index>, with: C) -> Void replaceRange(subRange: Range<Index>, with: String) -> Void reserveCapacity(n: Int) -> Void startIndex: Index unicodeScalars: String.UnicodeScalarView uppercaseString: String utf16: String.UTF16View utf8: String.UTF8View withCString(f: UnsafePointer<Int8> throws -> ResultUnsafePointer<Int8> throws -> Result) -> Result withMutableCharacters(body: (inout String.CharacterView) -> R(inout String.CharacterView) -> R) -> R write(other: String) -> Void writeTo(&target: Target) -> Void 6> hello.isEmpty $R0: Bool = false
이 구문 분석 실행 인터페이스에는 자동 프롬프트 완성 기능도 있습니다! 위의 다섯번째 줄은 hello를 입력하고 조금 더 입력한 후 탭키를 누르면 문자열에 대한 수많은 메소드가 한꺼번에 나타나서 더 이상 메소드가 기억나지 않을 걱정이 없게 됩니다. 터미널 모드의 이름.
위의 간단한 코드에는 클래스와 객체가 포함되어 있지 않습니다. 클래스의 정의와 객체 생성 및 이를 Swift 파서에 직접 입력하여 간단한 사용법을 살펴보겠습니다.
diveinedu@diveinedu-VirtualBox:~$ swift Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance. 1> struct Resolution { 2. var width = 0 3. var height = 0 4. } 5. class VideoMode { 6. var resolution = Resolution() 7. var interlaced = false 8. var frameRate = 0.0 9. var name: String? 10. func description() 11. { 12. print("name:\(name) frameRate:\(frameRate)") 13. } 14. } 15> let mode = VideoMode() mode: VideoMode = { resolution = { width = 0 height = 0 } interlaced = false frameRate = 0 name = nil } 16> mode.name = "1080p HD" 17> mode.frameRate = 30.0 18> mode.description() name:Optional("1080p HD") frameRate:30.0 19>
새 .swift 형식 파일을 생성한 다음 실행 가능한 바이너리 파일로 컴파일해야 한다면 어떻게 될까요? . Swiftc 명령을 사용하여 컴파일할 수 있습니다. Swift 코드 파일을 저장할 새 디렉토리를 생성한 다음 test.swift를 편집할 수 있습니다:
diveinedu@diveinedu-VirtualBox:~$ mkdir -p $HOME/swift/swiftcode diveinedu@diveinedu-VirtualBox:~$ cd $HOME/swift/swiftcode diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ gedit test.swift
gedit 텍스트 편집기를 연 후 클래스 및 객체 생성과 메소드 호출을 위해 위의 코드를 입력하고, list 아래에 저장한 후
struct Resolution { var width = 0 var height = 0 } class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? func description() { print("name:\(name) frameRate:\(frameRate)") } } let mode = VideoMode() mode.name = "1080p HD" mode.frameRate = 30.0 mode.description()
에디터를 닫은 후, Swiftc test.swift를 실행하여 소스 파일을 컴파일하면 다음 링크 오류가 나타납니다.
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ swiftc test.swift <unknown>:0: error: link command failed with exit code 127 (use -v to see invocation) diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$
해결 방법은 설치하는 것입니다. 컴파일 종속성 clang libicu-dev, 다음 명령을 입력하고 Enter를 누르십시오(현재 사용자 비밀번호를 묻는 메시지가 표시됩니다)
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ sudo apt-get install clang libicu-dev
설치가 완료된 후 다시 컴파일 명령 Swiftc test.swift를 실행하면 컴파일이 성공하면 테스트 실행 파일이 현재 디렉터리에 출력됩니다.
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ swiftc test.swift diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ ./test name:Optional("1080p HD") frameRate:30.0
而且执行ldd ./test查看此二进制文件依赖的动态库可知,它链接了libswiftCore,这是所有swift程序都会需要的。
diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ ldd ./test linux-vdso.so.1 => (0x00007ffcef3f5000) libswiftCore.so => /home/diveinedu/swift/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/usr/lib/swift/linux/libswiftCore.so (0x00007f1cd2f75000) libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1cd2bdd000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1cd28d5000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1cd26be000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1cd22f3000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1cd20d5000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1cd1ed1000) libicuuc.so.55 => /usr/lib/x86_64-linux-gnu/libicuuc.so.55 (0x00007f1cd1b3c000) libicui18n.so.55 => /usr/lib/x86_64-linux-gnu/libicui18n.so.55 (0x00007f1cd16d9000) libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f1cd14c9000) /lib64/ld-linux-x86-64.so.2 (0x0000556e488b7000) libicudata.so.55 => /usr/lib/x86_64-linux-gnu/libicudata.so.55 (0x00007f1ccfa11000)
细心的读者会发现好像不见main函数或者main相关的函数,程序照样可以运行,不管是脚本还是编译成二进制可执行文件,这个我以后再细说了。