试图制作一个小的ncurses应用程序,但错误:顶层不允许使用表达式

时间:2017-08-04 09:21:35

标签: swift

按照iachievedit的说明并使用mccuneware的ncurses包,我无法运行以下代码而不会出错。

import Foundation
import CNCURSES
import Glibc

enum Signal:Int32 {
case INT   = 2
case WINCH = 28
}

typealias SignalHandler = __sighandler_t

func trap(signum:Signal, action:SignalHandler) {
  signal(signum.rawValue, action)
}

trap(.INT) { signal in
  endwin()
  exit(0)
}

initscr()
noecho()    // Turn on noecho, though it doesn't matter in this example
curs_set(0) // 0 is invisible, 1 is visible, 2 is very visible

move(0, 0)
addstr("UL")
refresh() // This is required to update the screen
move(23,78)
addstr("LR")
refresh()

select(0, nil, nil, nil, nil) // Wait

错误是:

Compile Swift Module 'ncurses' (1 sources)
/home/luis/Dropbox/Documentos/Coding/Swift/ncurses/Sources/ncurses.swift:17:1: error: expressions are not allowed at the top level
initscr()
^

目录结构是:

的ncurses / Package.swift

的ncurses /来源/ ncurses.swift

上述CNCURSES在Package.swift中调用:

// swift-tools-version:3.1

import PackageDescription

let package = Package(
    name: "ncurses",  
    dependencies: [
    .Package(url:  "https://github.com/mccuneware/CNCURSES", majorVersion:1),
  ]
)

对我来说,说明已经过时,但如何规避错误?

1 个答案:

答案 0 :(得分:1)

表达式确实不能位于模块的顶层。您必须在main.swift文件中编写这些文件,这是编译器所期望的。 main.swift文件是程序执行的入口点。

准确地说:包含根级指令的文件必须命名为main.swift,而不是其他任何内容;当然,其他文件可以存在,但它们不能有顶级指令。