Swift 在macOS中尝试从粘贴板获取文本时出错
我想从剪贴板中获取文本。我写了一个代码,似乎工作,但有时它崩溃,例如,当我试图使用该应用程序时,当我作为客人用户登录。可能是因为粘贴板不能包含文本 这就是我正在使用的代码,我想用条件语句包装最后一行,但这样做似乎太晚了,因为在那一点上我收到了一个错误Swift 在macOS中尝试从粘贴板获取文本时出错,swift,macos,nspasteboard,Swift,Macos,Nspasteboard,我想从剪贴板中获取文本。我写了一个代码,似乎工作,但有时它崩溃,例如,当我试图使用该应用程序时,当我作为客人用户登录。可能是因为粘贴板不能包含文本 这就是我正在使用的代码,我想用条件语句包装最后一行,但这样做似乎太晚了,因为在那一点上我收到了一个错误 func pasteOverAction() { // create a pasteboard instance let pasteboard = NSPasteboard.general() // create an
func pasteOverAction() {
// create a pasteboard instance
let pasteboard = NSPasteboard.general()
// create an array for put pasteboard content
var clipboardItems: [String] = []
// iterate elements in pasteboard
for element in pasteboard.pasteboardItems! {
// if it's text
if let str = element.string(forType: "public.utf8-plain-text") {
clipboardItems.append(str) // put in the array
}
}
// put the first element of the array in a constant
// sometimes crashes here
let firstStringOfClipboard = clipboardItems[0]
}
我发现了这个问题。当剪贴板中还没有文本时(例如,当您刚刚与来宾用户登录时),创建的数组中没有任何项,您会收到超出范围的错误。我通过添加一个检查来避免错误 代码与问题中的代码类似,除了虚线之间的部分
func pasteOverAction() {
// create a pasteboard instance
let pasteboard = NSPasteboard.general()
// create an array for put pasteboard content
var clipboardItems: [String] = []
// iterate elements in pasteboard
for element in pasteboard.pasteboardItems! {
// if it's text
if let str = element.string(forType: "public.utf8-plain-text") {
clipboardItems.append(str) // put in the array
}
}
// Added part ----------------------------------------
// avoid out of range if there is not a tex item
let n = clipboardItems.count
if n < 1 {
NSBeep() // warn user that there is not text in clipboard
return // exit from the method
}
// ---------------------------------------------------
// put the first element of the array in a constant
// now don't crashes here anymore
let firstStringOfClipboard = clipboardItems[0]
}
func pasteOverAction(){
//创建粘贴板实例
让pasteboard=NSPasteboard.general()
//创建用于放置粘贴板内容的数组
var clipboardItems:[字符串]=[]
//在粘贴板中迭代元素
用于pasteboard.pasteboardItems中的元素{
//如果是文本
如果let str=element.string(forType:“public.utf8纯文本”){
clipboardItems.append(str)//放入数组
}
}
//附加部分----------------------------------------
//如果没有tex项目,请避免超出范围
设n=clipboardItems.count
如果n<1{
NSBeep()//警告用户剪贴板中没有文本
return//exit退出该方法
}
// ---------------------------------------------------
//将数组的第一个元素放入常量中
//现在不要再在这里撞车了
让firstStringOfClipboard=clipboardItems[0]
}
您的问题是。粘贴板项目代码>。您不应强制展开可选文件。相反,处理此属性为nil的可能性。UTI类型应为“public.plain text”