以下代码给出了编译器错误"使用未声明的类型AutoreleasingUnsafePointer"
var myString: AutoreleasingUnsafePointer<NSString?>
Run Code Online (Sandbox Code Playgroud)
我错过了编译器设置步骤吗?
谢谢
我有一个带引号的可打印字符串,例如“The cost would be =C2=A31,000”。如何将其转换为“成本为 \xc2\xa31,000”。
\n\n我目前只是手动转换文本,这并不涵盖所有情况。我确信只有一行代码可以帮助解决这个问题。
\n\n这是我的代码:
\n\nfunc decodeUTF8(message: String) -> String\n{\n var newMessage = message.stringByReplacingOccurrencesOfString("=2E", withString: ".", options: NSStringCompareOptions.LiteralSearch, range: nil)\n newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=A2", withString: "\xe2\x80\xa2", options: NSStringCompareOptions.LiteralSearch, range: nil)\n newMessage = newMessage.stringByReplacingOccurrencesOfString("=C2=A3", withString: "\xc2\xa3", options: NSStringCompareOptions.LiteralSearch, range: nil)\n newMessage = newMessage.stringByReplacingOccurrencesOfString("=A3", withString: "\xc2\xa3", options: NSStringCompareOptions.LiteralSearch, range: nil)\n newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=9C", withString: "\\"", options: NSStringCompareOptions.LiteralSearch, range: nil)\n newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=A6", withString: "\xe2\x80\xa6", options: NSStringCompareOptions.LiteralSearch, range: nil)\n newMessage = newMessage.stringByReplacingOccurrencesOfString("=E2=80=9D", withString: "\\"", options: NSStringCompareOptions.LiteralSearch, range: nil)\n …Run Code Online (Sandbox Code Playgroud) 我希望能够突出显示 NSTextField 中的一部分文本,但我无法通过谷歌来做到这一点。
我已经定义了一个 NSRange,但我找不到使用这个范围来突出显示文本的方法。我唯一出现的是 textField.selectText 但这应该突出显示整个字段。
我正在使用 Swift 2。
我正在尝试为我的 NSTableView 生成自定义标头。我想更改标题文本的字体并删除边框和垂直分隔符。
我当前的顶部和底部标题如下所示:
有谁知道我该怎么做?
更新:应用修复后,标题现在看起来像我预期的那样:
我有一个名为"我/项目"的文件夹.当我尝试调用createDirectoryAtPath时,我得到两个文件夹"My",其子文件夹为"Project".
我看过终端如何代表这个:
/Users/currentuser/Documents/Projects/My\ \:\ Project
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
let projectName = "My / Project"
let path:NSString = "/Users/currentuser/Documents/Projects/"
let fullPath:NSString = path.stringByAppendingPathComponent(projectName)
if (!NSFileManager.defaultManager().fileExistsAtPath(fullPath:NSString))
{
do
{
try NSFileManager.defaultManager().createDirectoryAtPath(fullPath:NSString, withIntermediateDirectories: true, attributes: nil)
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
projectName.stringByReplacingOccurrencesOfString("/", withString: "\:")
Run Code Online (Sandbox Code Playgroud)
匹配终端但Xcode抱怨无效的转义序列.
更新#1:编码文件夹名称也无法正常工作.
let encodedPath = projectName.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLUserAllowedCharacterSet())
let fullPath2:NSString = path.stringByAppendingPathComponent(encodedPath!)
NSFileManager.defaultManager().fileExistsAtPath(encodedPath!)
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方式是什么?
我正在尝试使用 NSString 实现简单的拖放。我可以使用 NSURL 但不能使用 NSString。每次我尝试拖放时,我总是得到一个零值。这是我的代码:
struct ContentView: View
{
var body: some View
{
Text("Hello World")
.onDrag { NSItemProvider(object: "Hello World" as NSString) }
}
}
Run Code Online (Sandbox Code Playgroud)
然后是掉落的物体:
struct DroppedView: View, DropDelegate
{
var body: some View
{
Text("Drop here")
.onDrop(of: ["public.text"], delegate: self)
}
func performDrop(info: DropInfo) -> Bool
{
if let items = info.itemProviders(for: ["public.text"]).first
{
item.loadItem(forTypeIdentifier: "public.text", options: nil)
{
(data, error) in
print(data)
}
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
我本以为输出是“Hello World”。我缺少什么?
我有此case语句,该语句给出错误“变量constant1未使用”。似乎是忽略变量并返回顶行,因此变量显然没有作用域。如果我将常数替换为数字1,那么它将起作用。在Elixir中做到这一点的最佳方法是什么?
defmodule Main
do
def constant1, do: 1
def constant2, do: 1
def constant3, do: 1
x = 1
y = 0
z = 0
{a, b, c, d} =
case {x, y, z} do
{constant1, constant2, constant3} -> {1, 2, 3, 4}
{constant1, constant2, _} -> {5, 6, 7, 8}
{constant1, _, _} -> {9, 10, 11, 12}
{_, _, _} -> {13, 14, 15, 16}
end
IO.inspect {a, b, c, d}
end
Run Code Online (Sandbox Code Playgroud)
这是输出:
warning: variable constant1 is unused …Run Code Online (Sandbox Code Playgroud) 在我看来,我在初始化数组时遇到问题:
struct ProjectList: View
{
@ObservedObject var store: ProjectStore
@Binding var searchText: String
@State private var query: [Project] = []
@State private var indexes: [String] = ["E","F"]
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = ["A","B"] //store.getIndexes(search: searchText.wrappedValue)
print (indexes)
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所期望的,在我的初始化例程中索引被设置为 ["E","F"] 而不是 ["A","B"] 。怎么了?
我观看了 WWDC 视频“采用 macOS 的新外观”,他们在视频中的 11:32 在 Swift 中介绍了 NSSearchToolBarItem。
这正是我需要做的,但是如何将此搜索添加到 SwiftUI 的工具栏中?
有很多复杂的例子,但它们似乎都是在这个新 API 之前编写的。一定有更简单的方法吗?
import SwiftUI
var listItems = ["Item 1", "Item 2", "Item 3", "Item 4"]
struct ContentView: View
{
@State var select: String? = "Item 1"
@State var searchText: String = "hello"
var body: some View
{
VStack
{
NavigationView
{
List
{
ForEach((0..<listItems.count), id: \.self)
{index in
Label(listItems[index], systemImage: "briefcase")
}
}
}
.toolbar
{
Button(action: {})
{
Label("Upload", systemImage: "square.and.pencil")
}
TextField("Search", text: $searchText) …Run Code Online (Sandbox Code Playgroud) 我尝试使用以下方法设置我自己的 NSProgressIndicator。
class ProgressViewController : NSViewController
{
override func loadView()
{
let view = NSView(frame: NSMakeRect(0,0,300,120))
view.wantsLayer = true
view.layer?.borderWidth = 0
self.view = view
let text = NSTextField(frame: NSRect(x: 20, y: 45, width: 260, height: 20))
text.drawsBackground = true
text.isBordered = false
text.backgroundColor = NSColor.controlColor
text.isEditable = false
self.view.addSubview(text)
text.stringValue = "Progress Text"
let indicator = NSProgressIndicator(frame: NSRect(x: 20, y: 20, width: 260, height: 20))
indicator.minValue = 0.0
indicator.maxValue = 100.0
indicator.doubleValue = 33.0
self.view.addSubview(indicator)
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是指标始终显示为满。我错过了一个技巧吗?