小编Den*_*ink的帖子

如何在Swift中以编程方式创建"Back"UIBarButton项?

我能够创建一个UIBarButton项目,可以使用以下代码以编程方式返回:

    func backAction() -> Void {        
        self.navigationController?.popViewControllerAnimated(true)
    }
override func viewDidLoad() {
        super.viewDidLoad()
    let backButton = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: self, action: "backAction")

        self.navigationItem.leftBarButtonItem = backButton
    }
Run Code Online (Sandbox Code Playgroud)

问题是后退按钮没有左箭头: 在此输入图像描述 有没有办法让它看起来像一个带箭头的常规后退按钮,如下所示: 在此输入图像描述

我还想知道是否有办法将按钮标题名称作为前一个视图控制器的标题,如果可能的话.

谢谢

uibarbuttonitem ios swift

14
推荐指数
2
解决办法
3万
查看次数

在ViewDidLoad中执行Segue

我试图在第一次加载应用程序时执行segue.我可以在调试器中看到我的打印消息,但Perform Segue不起作用.我没有得到任何错误.有人可以告诉我什么错了吗?

import UIKit
import LocalAuthentication
let isFirstLaunch = UserDefaults.isFirstLaunch()
extension UserDefaults {
    // check for is first launch - only true on first invocation after app install, false on all further invocations
    // Note: Store this value in AppDelegate if you have multiple places where you are checking for this flag
    static func isFirstLaunch() -> Bool {
        let hasBeenLaunchedBeforeFlag = "hasBeenLaunchedBeforeFlag"
        let isFirstLaunch = !UserDefaults.standard.bool(forKey: hasBeenLaunchedBeforeFlag)
        if (isFirstLaunch) {

            UserDefaults.standard.set(true, forKey: hasBeenLaunchedBeforeFlag)
            UserDefaults.standard.synchronize()
        }
        return isFirstLaunch
    }
}

class …
Run Code Online (Sandbox Code Playgroud)

xcode viewdidload ios segue swift

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

模糊使用函数(Swift 4)

我一直试图弄清楚为什么以下代码含糊不清......

public func product <T1: Sequence, T2: Sequence> (_ sequence1: T1, _ sequence2: T2) ->
    AnySequence<(T1.Element, T2.Element)> {
  return AnySequence(
    sequence1.flatMap { element1 in
      sequence2.map { element2 in
        (element1, element2)
      }
    }
  )
}

public func product <T1: LazySequenceProtocol, T2: LazySequenceProtocol> (_ sequence1: T1, _ sequence2: T2) ->
    LazySequence<AnySequence<(T1.Element, T2.Element)>> {
  return AnySequence(
    sequence1.flatMap { element1 in
      sequence2.map { element2 in
        (element1, element2)
      }
    }
  ).lazy
}
Run Code Online (Sandbox Code Playgroud)

...当我用两个惰性序列调用它并调用makeIteratorEXAMPLE时.

_ = product([1, 2].lazy, [3, 4].lazy).makeIterator()
Run Code Online (Sandbox Code Playgroud)

然而,以下代码没有这种模糊性......

public struct …
Run Code Online (Sandbox Code Playgroud)

functional-programming overloading swift swift4

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

如何将UIPageControl连接到UICollectionView(Swift)

我目前正在使用UICollectionView来显示3个图像(每个图像跨越整个单元格).我还有一个UIPageControl,我放在UICollectionView的顶部.我想要发生的是让UIPageControl显示图像的数量(在这种情况下是3),以及用户当前正在查看的图像.我想要的效果是Instagram应用程序的效果.

我目前用来实现这种效果的方法是将UIPageControl的更新放在UICollectionView的willDisplay函数中,如下所示:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
    pictureDots.currentPage = indexPath.item
}
Run Code Online (Sandbox Code Playgroud)

这样可以正确地连接集合视图和页面控件之间的分页效果.但是,我遇到的问题是UIPageControl开始说用户在第三个图像上,即使它正在显示第一个图像.

有谁知道为什么会这样,以及如何解决这个问题?

uipagecontrol ios uicollectionview swift

9
推荐指数
2
解决办法
8949
查看次数

使用Swift Package Manager抑制来自依赖项的警告

假设我在Package.swift下面有这样的,并且SomePackage从依赖关系中产生警告swift build.

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "my-app",
    dependencies: [
        .package(url: "https://some-package.git", .upToNextMajor(from: "1.0"))
    ],
    targets: [
        .target(name: "Run", dependencies: ["SomePackage"]
    ]
)
Run Code Online (Sandbox Code Playgroud)

如何从依赖项中抑制这些警告,但保留那些来自我的代码的警告?

swift swift-package-manager

6
推荐指数
3
解决办法
554
查看次数

SKTileMap从GKNoiseMap获取值

我一直在GKNoiseMaps上关注Apple Docs,我设法得到一个图像产生,它看起来非常好

在这里使用此代码

class GameScene: SKScene {


class Noise: GKNoise {
    var NoiseSource = GKPerlinNoiseSource(frequency: 0.05, octaveCount: 3, persistence: 1, lacunarity: 1, seed: Int32(arc4random_uniform(UInt32(500 - 1))))
    override init(_ noiseSource: GKNoiseSource, gradientColors: [NSNumber : UIColor]) {
        super.init(NoiseSource, gradientColors: [ (+1.0 as NSNumber): UIColor.red, (-1.0 as NSNumber) : UIColor.black])
    }
}
let noise = Noise()
let Vector1 = vector_double2(1.0, 1.0)

override func didMove(to view: SKView) {
    let NoiseMap = GKNoiseMap(noise, size: vector_double2(300.0, 300.0),
                              origin: vector_double2(0.0, 0.0),
                              sampleCount: vector_int2(100),
                              seamless: true) …
Run Code Online (Sandbox Code Playgroud)

perlin-noise ios sprite-kit swift sktilemapnode

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

优化惰性集合

这个问题是关于优化惰性集合的。我将首先解释问题,然后对可能的解决方案进行一些思考。问题以粗体显示

问题

Swift期望对Collections的操作为O(1)。一些操作中,特别是prefixsuffix样类型,偏离且为O(n)或更高的量级上。

延迟集合不能在初始化期间遍历基本集合,因为应该将计算尽可能长地延迟,直到实际需要该值为止。

那么,我们如何优化惰性集合?当然,这引出了一个问题,什么构成了优化的惰性集合?

思想

最明显的解决方案是缓存。这意味着第一次调用集合的方法具有不利的时间复杂度,但是随后可以在O(1)中计算对相同或其他方法的后续调用。为了更快的计算,我们将一些空间复杂度交易为O(n)的数量级。

尝试struct通过缓存优化s 上的惰性集合是不可能的,因为subscript(_ position:)您需要实现的所有其他方法都必须LazyProtocolCollection是non-,mutating并且structs默认是不可变的。这意味着我们必须为每次调用属性或方法重新计算所有操作。

这给我们留下了classes。类是可变的,这意味着所有计算的属性和方法都可以在内部改变状态。当我们使用类优化延迟集合时,我们有两个选择。首先,如果惰性类型的属性是variable,那么我们将自己带入一个充满痛苦的世界。如果更改属性,则可能会使先前缓存的结果无效。我可以想象管理代码路径以使属性可变为令人头疼的问题。其次,如果我们使用lets ,那么我们很好。初始化期间设置的状态无法更改,因此不需要更新缓存的结果。请注意,此处我们仅讨论的是带有纯方法且没有副作用的惰性集合。

但是类是引用类型。将引用类型用于惰性集合有什么弊端?Swift标准库不使用它们作为入门。

对不同的方法有什么想法或想法吗?

optimization lazy-evaluation swift

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

使用 Swift 包管理器导入模块

我正在尝试使用 Swift 的包管理器在我的项目中导入外部模块。我的第一个模块来自Vapor 项目。我似乎无法让它工作。我开始

swift package init
swift package generate-xcodeproj
Run Code Online (Sandbox Code Playgroud)

我的 Package.swift 看起来像这样:

import PackageDescription

let package = Package(
    name: "OpenTools",
    products: [
        .library(
            name: "OpenTools",
            targets: ["OpenTools"]),
    ],
    dependencies: [
        .package(url: "https://github.com/vapor/json.git", from: "2.0.0")
    ],
    targets: [
        .target(name: "OpenTools", dependencies: ["JSON"]),
    ]
)
Run Code Online (Sandbox Code Playgroud)

然后我跑

swift package update
swift package generate-xcodeproj # to regenerate with dependencies
Run Code Online (Sandbox Code Playgroud)

然后尝试在我的主文件中导入 JSON 包

import JSON
Run Code Online (Sandbox Code Playgroud)

模块如下所示,但导入返回No such module 'JSON'错误。

在此处输入图片说明

有什么想法吗?

swift swift-package-manager

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