小编psm*_*irl的帖子

在 Swift 中使用 termios

现在我们已经达到了 Swift 2.0,我决定将我尚未完成的 OS X 应用程序转换为 Swift。取得了进展,但我在使用 termios 时遇到了一些问题,需要一些澄清和建议。

termios 结构在 Swift 中被视为结构,这并不奇怪,但令人惊讶的是结构中的控制字符数组现在是一个元组。我原以为它只是一个数组。正如你可能想象的那样,我花了一段时间才弄清楚这一点。如果我在游乐场工作:

var settings:termios = termios()
print(settings)
Run Code Online (Sandbox Code Playgroud)

然后我得到了该结构打印的正确详细信息。

在 Obj-C 中设置您将使用的控制字符,例如,

cfmakeraw(&settings);
settings.c_cc[VMIN] = 1;
Run Code Online (Sandbox Code Playgroud)

VMINtermios.h 中的 #define 等于 16 。在斯威夫特我必须做

cfmakeraw(&settings)
settings.c_cc.16 = 1
Run Code Online (Sandbox Code Playgroud)

这是有效的,但有点不透明。我更喜欢使用类似的东西

settings.c_cc.vim = 1
Run Code Online (Sandbox Code Playgroud)

相反,但似乎找不到任何描述 termios 的 Swift“版本”的文档。有谁知道元组是否为其元素预先分配了名称,或者如果没有,是否有办法在事后分配名称?我应该使用命名元素创建自己的元组,然后将其分配给吗settings.c_cc

有趣的是,尽管事实上预处理器指令不应该在 Swift 中工作,但如果我这样做的话

print(VMIN)
print(VTIME)
Run Code Online (Sandbox Code Playgroud)

然后打印正确的值并且不会产生编译器错误。我有兴趣对此进行任何澄清或评论。这是一个错误吗?

剩下的问题与 termios 的进一步配置有关。

的定义cfsetspeed

func cfsetspeed(_: UnsafeMutablePointer<termios>, _: speed_t) -> Int32
Run Code Online (Sandbox Code Playgroud)

并且speed_t被 typedef'ed 为 unsigned long。在 Obj-C 中我们会这样做

cfsetspeed(&settings, B38400);
Run Code Online (Sandbox Code Playgroud)

但由于B38400termios.h …

macos termios swift swift2

5
推荐指数
1
解决办法
910
查看次数

在NSTextView中拖动插入符与characterIndexForPoint的结果不匹配

我正在拖动到NSTextView上(从另一个窗口的表中),并且当我在NSTextView中拖动文本时,将显示插入标记,其中显示了插入点。似乎无法获取此插入符号的位置,我正在使用:

NSPoint mouseLocation = [sender draggingLocation];
NSPoint localMouseLocation = [self convertPoint:mouseLocation fromView:nil];
CGFloat fraction = 0.4;
NSUInteger dropLocation = [[self layoutManager] characterIndexForPoint:localMouseLocation inTextContainer:[self textContainer] fractionOfDistanceBetweenInsertionPoints:&fraction];
Run Code Online (Sandbox Code Playgroud)

问题是有时插入的文本会在显示的插入符号的左侧插入一个字符。我尝试了'fractionOfDistanceBetweenInsertionPoints'的不同值,但没有成功。

Q1。有没有一种方法可以获取插入的插入符的位置?

Q2。苹果使用什么“ fractionOfDistanceBetweenInsertionPoints”值?

Q3。我是否应该使用其他方法(也许是drawInsertionPointInRect)?

谢谢。

cocoa

3
推荐指数
1
解决办法
326
查看次数

Swift2:正确初始化UnsafeMutablePointer <Unmanaged <CFM​​utableDictionary>?>参数以传递给IORegistryEntryCreateCFProperties的方法

好的,所以在Swift 2中,定义IORegistryEntryCreateCFProperties

func IORegistryEntryCreateCFProperties(entry: io_registry_entry_t, _ properties: UnsafeMutablePointer<Unmanaged<CFMutableDictionary>?>, _ allocator: CFAllocator!, _ options: IOOptionBits) -> kern_return_t
Run Code Online (Sandbox Code Playgroud)

我可以

var dict: UnsafeMutablePointer<Unmanaged<CFMutableDictionary>?> = nil
kr = IORegistryEntryCreateCFProperties(box as io_registry_entry_t, dict, kCFAllocatorDefault, nilOptions)
Run Code Online (Sandbox Code Playgroud)

编译和运行.当然,它在执行时崩溃,IORegistryEntryCreateCFProperties因为它dict被初始化为nil.我的问题是如何初始化dict为非零值?我尝试了各种方法但没有成功.

macos iokit swift swift2

3
推荐指数
1
解决办法
587
查看次数

标签 统计

macos ×2

swift ×2

swift2 ×2

cocoa ×1

iokit ×1

termios ×1