小编Mel*_*ius的帖子

Codable类不符合协议Decodable

为什么我得到"类型'书签'不符合协议'可解码'"错误消息?

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的解码初始化将书签引用设置为自身.

swift swift4 codable decodable

40
推荐指数
8
解决办法
5万
查看次数

在NSTextView示例中使用NSTextList的项目符号列表?

我想在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)

macos cocoa nstextview swift

8
推荐指数
1
解决办法
867
查看次数

自定义UIGestureRecognizer用于双指手势

我有一个自定义的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)

uigesturerecognizer ios swift

6
推荐指数
1
解决办法
553
查看次数

无法让 SwiftUI 列表选择与自定义结构一起使用

我正在尝试列出一份最喜欢的报纸清单。在编辑模式下,列表显示所有可用的报纸,用户可以从中选择他最喜欢的报纸。选择收藏夹后,列表仅显示收藏夹。这是我的代码:

 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)

list selection ios swiftui

6
推荐指数
1
解决办法
1229
查看次数

错误:将非转义参数“ publicationQuery”分配给@转义闭包

我有一个这样的视图控制器:

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'分配给@转义闭包”错误?

closures escaping ios swift

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

如何在CGContext中绘制String?

我正在尝试在(我正在为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时代,您应该如何画线?没有大量的网络搜索可以得出答案。

calayer cgcontext ios swift

4
推荐指数
2
解决办法
1778
查看次数

你如何呈现 UIAlertControllers 的序列?

我有一个应用程序可以一次从服务器下载许多出版物。对于应用程序中已经存在的每个出版物,我想提示用户是否要覆盖现有版本。

是否有任何干净的方式来呈现 UIAlertControllers,以便当用户回答一个时,应用程序呈现下一个?

ios swift uialertcontroller

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

未找到 NSNotification.Name.didBecomeActiveNotification

我正在 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)

问题是什么?

macos nsnotifications notificationcenter swift

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

如何在 SwiftUI 中为 Int 类型属性创建滑块?

我有一个名为“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 仅适用于双打/浮动。

我怎样才能让它与我的整数一起工作?

slider swiftui

0
推荐指数
2
解决办法
260
查看次数