为什么我得到"类型'书签'不符合协议'可解码'"错误消息?
class Bookmark: Codable {
weak var publication: Publication?
var indexPath: [Int]
var locationInText = 0
enum CodingKeys: String, CodingKey {
case indexPath
case locationInText
}
init(publication: Publication?, indexPath: [Int]) {
self.publication = publication
self.indexPath = indexPath
}
}
Run Code Online (Sandbox Code Playgroud)
我不希望保存出版物var,因为出版物拥有书签,但书签需要知道它属于哪个出版物.Publication的解码初始化将书签引用设置为自身.
我想在NSTextView中解析用户输入,以便以" - "开头的行会自动启动项目符号列表.我需要对NSTextView.textStorage做什么来启用项目符号列表,以便在每个项目符号行后按Enter时自动显示下一个项目符号?
我已经找到了一些例子,但他们都手工插入子弹,所以我想知道let textList = NSTextList(markerFormat: "{box}", options: 0)如果你必须自己手动插入盒子符号是什么意思?
目前我正在尝试在一个自定义的NSTextView中实现这一点,并且重写shouldChangeTextInRange(affectedCharRange: NSRange, replacementString: String?)因此,一个简单的例子可以解决" - "启动一个自动项目符号列表的最简单的输入情况,将受到高度重视.
更新:
这是我目前使用的代码:
override func shouldChangeTextInRange(affectedCharRange: NSRange, replacementString: String?) -> Bool {
super.shouldChangeTextInRange(affectedCharRange, replacementString: replacementString)
if string == "-" && replacementString == " " {
let textList = NSTextList(markerFormat: "{disc}", options: 0)
let textListParagraphStyle = NSMutableParagraphStyle()
textListParagraphStyle.textLists = [textList]
let attributes = [NSParagraphStyleAttributeName: textListParagraphStyle]
string = "\t\(textList.markerForItemNumber(0))\t"
textStorage?.addAttributes(attributes, range: NSMakeRange(0, textStorage!.string.length))
return false
}
else if affectedCharRange.location > 0 && replacementString …Run Code Online (Sandbox Code Playgroud) 我有一个自定义的UIGestureRecognizer用于双指手势完美的工作,除了它是非常挑剔的同时手指必须触摸iOS设备,touchesBegan以便通过2次触摸调用.touchesBegan虽然我试图使用两根手指,但通常只用一次Touch即可调用.
有没有什么办法可以让你对触摸屏上的手指同时放置的触摸次数更加宽容?
我注意到,即使您先放置一根手指,然后再按住另一根手指,同时仍按住第一根手指,即可识别出两根手指敲击.
这是我的touchesBegan函数的代码:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
if touches.count != 2 {
state = .failed
return
}
// Capture the first touch and store some information about it.
if trackedTouch == nil {
trackedTouch = touches.min { $0.location(in: self.view?.window).x < $1.location(in: self.view?.window).x }
strokePhase = .topSwipeStarted
topSwipeStartPoint = (trackedTouch?.location(in: view?.window))!
// Ignore the other touch that had a larger x-value
for touch in touches {
if touch != …Run Code Online (Sandbox Code Playgroud) 我正在尝试列出一份最喜欢的报纸清单。在编辑模式下,列表显示所有可用的报纸,用户可以从中选择他最喜欢的报纸。选择收藏夹后,列表仅显示收藏夹。这是我的代码:
struct Newspaper: Hashable {
let name: String
}
struct ContentView: View {
@State var editMode: EditMode = .inactive
@State private var selection = Set<Newspaper>()
var favorites: [Newspaper] {
selection.sorted(by: ({ $0.name < $1.name }))
}
let newspapers = [
Newspaper(name: "New York Times"),
Newspaper(name: "Washington Post")
]
var body: some View {
NavigationView {
List(editMode == .inactive ? favorites : newspapers, id: \.name, selection: $selection) { aliasItem in
Text(aliasItem.name)
}
.toolbar {
EditButton()
}
.environment(\.editMode, self.$editMode)
}
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个这样的视图控制器:
class PublicationListViewController: UIViewController {
var publicationQuery: (() -> [Publication])!
func initWith(title: String, publicationQuery: () -> [Publication]) {
self.title = title
self.publicationQuery = publicationQuery
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会出现“将非转义参数'publicationQuery'分配给@转义闭包”错误?
我正在尝试在(我正在为iOS编程)的重写draw方法中绘制字符串CALayer。
override func draw(in ctx: CGContext) {
let font = UIFont.systemFont(ofSize: 30)
let string = NSAttributedString(string: "23", attributes: [NSAttributedStringKey.font: font])
string.draw(at: CGPoint(x: 200, y: 200))
}
Run Code Online (Sandbox Code Playgroud)
但是,这没有画任何东西(至少看不到任何东西)。更改填充和描边颜色没有任何区别。
如果我画一条线,它将显示出来,因此该函数被调用。我知道有一个,CATextLayer但是我需要直接绘制字符串。CGContext在Swift 4时代,您应该如何画线?没有大量的网络搜索可以得出答案。
我有一个应用程序可以一次从服务器下载许多出版物。对于应用程序中已经存在的每个出版物,我想提示用户是否要覆盖现有版本。
是否有任何干净的方式来呈现 UIAlertControllers,以便当用户回答一个时,应用程序呈现下一个?
我正在 Xcode 10.1 上使用 10.14 部署目标开发 macOS 应用程序。根据文档,应该有一个 NSNotification.Name.didBecomeActiveNotification,但构建失败并出现Type 'NSNotification.Name?' has no member 'didBecomeActiveNotification'错误。我导入了 Cocoa、AppKit 和 Foundation。这是相关的代码:
NotificationCenter.default.addObserver(forName: .didBecomeActiveNotification, object: nil, queue: nil) { notification in
print("\(notification)")
}
Run Code Online (Sandbox Code Playgroud)
问题是什么?
我有一个名为“score”的 Int 属性的视图,我想用滑块调整它。
struct IntSlider: View {
@State var score:Int = 0
var body: some View {
VStack{
Text(score.description)
Slider(value: $score, in: 0.0...10.0, step: 1.0)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是 SwiftUI 的 Slider 仅适用于双打/浮动。
我怎样才能让它与我的整数一起工作?