有没有办法定义一个枚举,当从rawValue默认值初始化为某个值而不是失败?在值可能意外(即服务器API错误)的情况下很有用
我有一个Objective-C类(恰好是一个按钮,但这并不重要),在我的(混合语言)项目的另一部分,我有一个这些按钮的数组,我想得到索引使用该find()方法的按钮.像这样:
func doSomethingWithThisButtonIndex(index:Int)
{
let buttons = [firstButton, secondButton, thirdButton]
if index == find(buttons, firstButton)
{
// we've selected the first button
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了
类型'ImplicitlyUnwrappedOptional'不符合协议等价
好的,让我们转到Objective-C并使用ButtonThing工具<Equatable>.但它不承认这一点.
那我该怎么办?现在我正在围绕它构建,迫使阵列成为NSArray并使用indexOfObject.但这很难看.令人沮丧.
我的控制器中有大约15个UIButton.我试图用一个简单的for循环来清除其中的10个,看起来我正在遇到某种冲突.
当我按下按钮清除时,我收到以下错误:
无法将'_UISizeTrackingView'(0x18a023c)类型的值转换为'UIButton'(0x1899298).(LLDB)
对于循环是:
for var i = 0; i < 9; i++ {
button = view.viewWithTag(i) as! UIButton
button.setImage(nil, forState: .Normal)
}
Run Code Online (Sandbox Code Playgroud)
我已将其缩小到使用标记0的项目的问题.我查看了View Controller场景中的所有项目,但似乎找不到任何冲突.我只看到使用tag = 0的一个按钮.
我甚至通过用'0'替换循环中的'i'来解决它并得到同样的问题.当我用'1'或'2'替换它时,可以正常使用该单个图像.
有什么方法可以看到哪个对象使用标签0?我点击了所有这些(包括主要的'视图'),但似乎找不到任何东西.
我已经在我的iOS应用程序上工作了一段时间,它在模拟器上构建并运行良好,但是当我尝试在我的设备上运行它时,会发生以下几件事:
应用程序崩溃,我的Xcode输出如下:
dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from:/private/var/mobile/Containers/Bundle/Application/18932CDB-57DA-4A87-B154-45B9F3CD01D0/Up & Down - Minimalistic, Beautiful Counter.app/Up & Down - Minimalistic, Beautiful Counter
Reason: no suitable image found. Did find:
/private/var/mobile/Containers/Bundle/Application/18932CDB-57DA-4A87-B154-45B9F3CD01D0/Up & Down - Minimalistic, Beautiful Counter.app/Frameworks/libswiftCore.dylib: mmap() error 1 at address=0x100110000, size=0x0015C000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/18932CDB-57DA-4A87-B154-45B9F3CD01D0/Up & Down - Minimalistic, Beautiful Counter.app/Frameworks/libswiftCore.dylib
(lldb)
Run Code Online (Sandbox Code Playgroud)还会出现以下消息,其他一些类似的错误:
dyld`dyld_fatal_error: Thread 1: EXC_BREAKPOINT (code=1,subcode=0x1200f5088)
-> 0x1200f5088 <+0>: brk #0x3
Run Code Online (Sandbox Code Playgroud)所以我不浪费你的时间,我想警告你,我已经尝试清理和构建,撤销和更新证书,删除所有断点,并重新启动Xcode和我的iPhone.
有关如何在我的设备上运行我的应用程序的任何想法?谢谢!!!
我在修复Swift 2.0之前的代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "RhymeFavoriten") {
// pass data to next view
let dest = segue.destinationViewController as! FavoritenViewController
let source = segue.sourceViewController as! RhymeViewController // !!!!!!
dest.favoritenType = 1
dest.delegate = self
}
}
Run Code Online (Sandbox Code Playgroud)
迁移告诉我要改变它
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "RhymeFavoriten") {
// pass data to next view
let dest = segue.destinationViewController as! FavoritenViewController
_ = segue.sourceViewController as! RhymeViewController // !!!!!!!!!!
dest.favoritenType = 1
dest.delegate = self …Run Code Online (Sandbox Code Playgroud) 我一直在阅读在Swift上发布的iBook Apple,我目前正在阅读有关功能的内容.在本章中,他们讨论了inout关键字.这让我想知道:当swift作为参数传递给函数时,swift会自动克隆参数吗?如果没有,我可以创建一个等于我想要传递给函数的变量的常量,然后传递常量以避免变量如果我不想变量?ex(顺便说一句,我知道整数是不可变的.我只是使用整数来保持简单.)
var variable: Int = 5
let constant = variable
let returnVale = function(constant)
Run Code Online (Sandbox Code Playgroud)
(对不起,如果这是一个明显的答案.我的编程经验很少.)感谢您的帮助.
我正在创建一个todo应用程序:
我在我的项目.datamodel文件中创建了一个实体,我在实体中添加了一个名为"content"的字符串的属性,并使用"editor">"Create NSManagedObject subclass"创建了NSManagedObject子类:

这个类是创建的:
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Targets : NSManagedObject
@property (nonatomic, retain) NSString * content;
@end
Run Code Online (Sandbox Code Playgroud)
但现在我想要另一个"id"属性,我可以给每个todo一个id ...我应该怎么做?可以手动完成吗?因为我是从实体模型生成的,所以我觉得我需要创建一个新的实体才能做到这一点......?
如果你可以指导我,也许通过解释它是如何工作的那将是很棒的..可能我不明白这里的东西,这就是我问这个问题的原因
这是来自swift编程语言 ibook 的代码示例:
class Product {
let name: String!
init?(name:String) {
if name.isEmpty { return nil }
self.name = name
}
}
Run Code Online (Sandbox Code Playgroud)
除非将name声明为变量而不是常量,否则它不起作用.是否已经在Swift 1.2中引入了有关此问题的更改,我不知道?
我以编程方式向视图控制器添加了一个条形按钮项:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Menu", style: .Plain, target: nil, action: nil)
}
Run Code Online (Sandbox Code Playgroud)
现在我想以IBOutlet编程方式将该按钮项分配给它.我怎么用Swift做到这一点?
试图获取数组的索引([AnyObject]).我错过了什么部分?
extension PageViewController : UIPageViewControllerDelegate {
func pageViewController(pageViewController: UIPageViewController, willTransitionToViewControllers pendingViewControllers: [AnyObject]) {
let controller: AnyObject? = pendingViewControllers.first as AnyObject?
self.nextIndex = self.viewControllers.indexOf(controller) as Int?
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Swift 1.2这种方法:
func indexOf<U: Equatable>(object: U) -> Int? {
for (idx, objectToCompare) in enumerate(self) {
if let to = objectToCompare as? U {
if object == to {
return idx
}
}
}
return nil
}
Run Code Online (Sandbox Code Playgroud)