我创建了一个符合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 吗?我尝试了我能想到的各种组合,但是,所有尝试都没有结果,并以编译时错误告终。
在早期版本的 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 的键设为字符串的正确方法是什么?
我的应用程序从后端加载图像并将它们显示在 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) 我是 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函数有什么问题吗?
基本上我想要完成的是让 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) 当我们想要设置一个 UIButton 的文本时,我们需要执行以下代码:
myButton.setTitle("My Text", forState: .normal)
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,当文本更改时,动画会像这样发生:
有没有办法在没有动画的情况下设置按钮的标题?
我希望按钮充当标准的 UILabel,但是我也希望它在按下时调用一个函数。
我正在尝试从我的 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 文件并运行其中的每一行,因此对于长脚本,并非所有二进制文件都在默认路径中。
谢谢!
这是我要实现的目标的高级描述;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) 我在 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)
我在点击按钮时运行此代码,但它不会在控制台上打印任何内容。
我有一个 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) swift3 ×10
ios ×7
swift ×5
macos ×2
uitableview ×2
arrays ×1
avfoundation ×1
observable ×1
rx-swift ×1
storyboard ×1
swift2 ×1
swift4 ×1
timer ×1
uibutton ×1
uiimage ×1
uiimageview ×1
xcode8 ×1