标签: swift3

在 Swift 的 if 语句中使用自定义参数处理错误

我创建了一个符合ErrorSwift的自定义枚举,如下所示:

enum CustomError: Error{
    case errorWith(code: Int)
    case irrelevantError
}
Run Code Online (Sandbox Code Playgroud)

CustomError 可以选择通过闭包从异步函数返回,如下所示:

func possiblyReturnError(completion: (Error?) -> ()){
    completion(CustomError.errorWith(code: 100))
}
Run Code Online (Sandbox Code Playgroud)

我现在想检查CustomError闭包中返回的类型。与此同时,如果它是一个CustomError.errorWith(let code),想提取那个的代码CustomError.errorWith(let code)。所有这些我都想使用 if 语句的条件来完成。沿着这个思路:

{ (errorOrNil) in
    if let error = errorOrNil, error is CustomError, // check if it is an 
    //.errorWith(let code) and extract the code, if so
    {
        print(error)
    }
    else {
        print("The error is not a custom error with a code")
    }
} 
Run Code Online (Sandbox Code Playgroud)

这完全可能使用 Swift 3.0 吗?我尝试了我能想到的各种组合,但是,所有尝试都没有结果,并以编译时错误告终。

error-handling ios swift swift3

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

如何在 Swift 3 中使用带有字符串键的 NSMapTable?

在早期版本的 Swift 中,我的 NSMapTable 中的键可以是字符串:

let mapTable = NSMapTable(keyOptions: .StrongMemory, valueOptions: .WeakMemory)
...
mapTable.setObject(..., forKey: "foo")
Run Code Online (Sandbox Code Playgroud)

每个:http : //nshipster.com/nshashtable-and-nsmaptable/

在 Swift 3 中, NSMapTable 需要通用参数。但是当我尝试这样做时:

NSMapTable<String, MyClass>(keyOptions: .strongMemory, valueOptions: .weakMemory)
Run Code Online (Sandbox Code Playgroud)

我得到一个"Type 'String' does not conform to protocol 'AnyObject'"错误。

在 Swift 3 中将 NSMapTable 的键设为字符串的正确方法是什么?

macos ios swift swift3

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

如果 UIImage 设置为 .scaleAspectFill,它会与标签重叠

我的应用程序从后端加载图像并将它们显示在 UITableViewCell 中,其中包含一个 UIImageView 来显示它以及一些标签和按钮。

我已使用“重置为建议的约束”选项将建议的约束添加到 UITableViewCell。

这是检索数据后的一些代码:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    var cell = PostTableViewCell()

    if (self.posts.count == 0) { return cell }

    let post = posts[indexPath.row]

    // Instancia o reuse identifier
    if post["post_image"] != nil {
        cell = tableView.dequeueReusableCell(withIdentifier: Storyboard.PostWithImage, for: indexPath) as! PostTableViewCell
    } else {
        cell = tableView.dequeueReusableCell(withIdentifier: Storyboard.PostWithoutImage, for: indexPath) as! PostTableViewCell
    }
    return cell
}


override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    var …
Run Code Online (Sandbox Code Playgroud)

uitableview uiimageview uiimage ios swift3

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

Swift 3:我需要在情节提要中链接 viewDidAppear 函数吗?

我是 Swift 的初学者。我正在尝试在单视图 Swift 3 项目中创建一个基本的登录和帐户创建系统。

在我的 ViewController.swift 中,我有一个 viewDidAppear 函数:

override func viewDidAppear(_ animated: Bool) {
    self.performSegue(withIdentifier: "loginView", sender: self)
}
Run Code Online (Sandbox Code Playgroud)

这是我的主要故事板: Main.storyboard

打开应用程序后,我希望先打开“受保护数据”页面,然后检查用户是否已登录。如果没有,则应显示登录页面。但是,我不知道如何实现这一目标。我试图链接导航控制器,但我没有将该功能视为一个选项。

现在,当我运行模拟器时,只显示“受保护数据”页面。

我该怎么办?另外,我的viewDidAppear函数有什么问题吗?

storyboard viewdidappear ios swift swift3

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

像 Snapchat 或 Houseparty 一样自动将前置摄像头用于 AVCaptureDevice 预览层 (Swift 3)

基本上我想要完成的是让 AVCaptureDevice 的前置摄像头成为 AVCaptureSession 期间应用程序上的第一个也是唯一的选项。

我环顾了 StackOverflow,提供的所有方法和答案都已从 iOS 10、Swift 3 和 Xcode 8 开始弃用。

我知道您应该使用 AVCaptureDeviceDiscoverySession 枚举设备并查看它们以区分正面和背面,但我不确定如何这样做。

有人可以帮忙吗?如果是这样就太棒了!

这是我的代码:

    override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    previewLayer.frame = singleViewCameraSlot.bounds
    self.singleViewCameraSlot.layer.addSublayer(previewLayer)
    captureSession.startRunning()

}



lazy var captureSession: AVCaptureSession = {
    let capture = AVCaptureSession()
    capture.sessionPreset = AVCaptureSessionPreset1920x1080
    return capture
}()

lazy var previewLayer: AVCaptureVideoPreviewLayer = {
    let preview =  AVCaptureVideoPreviewLayer(session: self.captureSession)

    preview?.videoGravity = AVLayerVideoGravityResizeAspect
    preview?.connection.videoOrientation = AVCaptureVideoOrientation.portrait
    preview?.bounds = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height)
    preview?.position = CGPoint(x: self.view.bounds.midX, y: …
Run Code Online (Sandbox Code Playgroud)

avfoundation avcapturesession swift swift3 xcode8

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

设置UIButton的标题时如何停止按钮动画

当我们想要设置一个 UIButton 的文本时,我们需要执行以下代码:

myButton.setTitle("My Text", forState: .normal)
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,当文本更改时,动画会像这样发生:

在此处输入图片说明

有没有办法在没有动画的情况下设置按钮的标题?

我希望按钮充当标准的 UILabel,但是我也希望它在按下时调用一个函数。

uibutton ios swift3

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

Swift mac 应用程序,在不知道路径的情况下运行终端命令(因此它会在 $PATH 中的每个路径中查找)?

我正在尝试从我的 swift mac 应用程序运行终端命令,我希望用户像在终端中一样输入任何命令,而不必指定真实路径。有没有办法运行命令并使其在 $PATH 变量中指定的每个路径中查找?

我可以在指定路径时运行命令,但我需要它从系统 $PATH 变量中的任何路径自动查找二进制文件

    let path = "/usr/bin/killall"
    let arguments = ["Dock"]
    let task = Process.launchedProcess(launchPath: path, arguments: arguments)
    task.waitUntilExit()
Run Code Online (Sandbox Code Playgroud)

将来我想读取 .sh 文件并运行其中的每一行,因此对于长脚本,并非所有二进制文件都在默认路径中。

谢谢!

macos swift swift2 swift3 swift4

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

UICollectionView reloadData() 不会更新集合视图中的单元格

这是我要实现的目标的高级描述;1. 获取数据 2. 将获取的数据保存在数组对象中 3. 使用数组的大小更新集合视图

这是我的代码

class ItemcollectionViewController:UICollectionViewController, UICollectionViewDelegateFlowLayout {

  let cellId = "CellId"
  var categories = [Category]()
  let viewOptionVar:ViewOptionBar = {
      let vOV = ViewOptionBar()
      vOV.translatesAutoresizingMaskIntoConstraints = false
      return vOV
  }()

  private func fetchData() {
      let categoryController = CategoryController()
      categoryController.getAllCategory(username: "blah", password: "password") {(returnedCategories, error) -> Void in
            if error != nil {
               print(error)
               return
            }
            self.categories = returnedCategories!
            print("size of the array is \(self.categories.count)")
            OperationQueue.main.addOperation{self.collectionView?.reloadData()}
      }

  }

  override func viewDidLoad() {
    super.viewDidLoad()
    fetchData()
    collectionView?.backgroundColor = UIColor.white
    collectionView?.register(ItemCell.self, …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview swift3

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

Rx Swift 简单计时器不起作用

我在 swift 3 中有这个 RxSwift 代码

let bag:DisposeBag = DisposeBag()
var sig:Observable<Int>!
sig = Observable<Int>.interval(1.0, scheduler: MainScheduler.instance)

sig.subscribe(onNext: { (milsec) in
    print("Mil: \(milsec)")
}).addDisposableTo(bag)
Run Code Online (Sandbox Code Playgroud)

我在点击按钮时运行此代码,但它不会在控制台上打印任何内容。

timer observable rx-swift swift3

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

Tableview 中的 CollectionView,数据源错误

我有一个 uiviewcontroller,我在其中放置了一个带有自定义单元格的 uitableview。这些单元格中的每一个都在一个 uicollectionview 中,并带有水平滚动条。

我以编程方式工作,所以 tableviewcell 是 collectionview 的委托/数据源。

我的数据源的结构,是一个阵列阵列

我的 tableview 对于每个 tableviewcell 都有一个 tableview section.Tableview 数据源方法使用array没有问题。我能够正确设置 tableview。在这个单元格内,我想显示一个带有水平滚动的集合视图。

我遇到的问题是我无法使用数组正确分配数据源到 collectionview。发生的情况是,当我加载 tableview 并向下滚动时,我看到重复的记录,因此例如前 3 行显示正确(就数据和项目数而言),但是从第 4 行开始,例如,数据是重复,所以我再次看到前 3 行的记录,当然这不必发生,因为如果我滚动第 4 行(第 4 行的集合视图),应用程序会由于索引问题而崩溃范围。

这很容易理解:假设我在第一行有 10 个单元格,在第 4 行/或部分有 5 个单元格,根据您的喜好......滚动第 4 行的集合视图将导致崩溃。这是因为错误的数据实际上与第一行相同:相反,我只有 5 个单元格要呈现...

我使用的技术非常简单:为每个 tableviewcell 的标签指定实际的 indexpath.section。然后在 collectionview 中,使用此标签循环遍历数组,然后使用 indexpath.item 来获取正确的数组

现在让我们来看看代码:

表视图

func numberOfSections(in tableView: UITableView) -> Int {
    return DataManager.shared.datasource.count
}
func tableView(_ tableView: …
Run Code Online (Sandbox Code Playgroud)

arrays uitableview ios uicollectionview swift3

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