我目前正在学习swift,并且我编写了以下愚蠢的代码,但结果显示如下:"当英雄处于2级时,怪物是可选的("sihso").我不知道为什么那里有可选词.
var level = 2
var mons = [1 : "SHhi", 2 : "sihso", 3 : "shssh"]
var monster = mons [level]
print("The monster is \(monster)" + " when the hero is at level \(level)")
Run Code Online (Sandbox Code Playgroud) 在iPad Mini上显示内存警告后,我的应用程序应用程序崩溃.经过大量研究后,我发现问题是由于内存分配所致,UIImage( named:)例如:
SkipTutorial.image = UIImage(named: "skipTutorial.png")
Run Code Online (Sandbox Code Playgroud)
我应该使用contentsOfFile方法,以便不缓存图像.所以我用过:
if let imgPath = NSBundle.mainBundle().pathForResource("skipTutorial", ofType: "png") {
SkipTutorial.image = UIImage(contentsOfFile:imgPath)
}
Run Code Online (Sandbox Code Playgroud)
但是,这不会获取图像.图像位于Xcode 中的Images.xcassets中.基本上我的应用程序使用了许多不需要缓存的图像.我在这里发现了类似的问题:
甚至他的查询在如何使用contentsOfFile方法的评论中都没有得到答复.如果有人帮助我,我真的很感激.
我的VB.Net类的构造函数传递了Enum属性的值.如果我在这个使用Select Case语句的类中创建一个方法,那么包含Case Else一行(永远不会被执行)是否正确编程?我理解它,只是想知道什么是"正确的"编程.
Public Enum eList
one = 1
two = 2
three = 3
End Enum
Public Class Class1
Private _eValue As eList
Public Sub New(ByVal ePassed As eList)
_eValue = ePassed
End Sub
Public Function SomeMethod() As Object
Select Case _eValue
'(all eList items accounted for below)
Case eList.one
'do something
Case eList.two
'do something else
Case eList.three
'do another thing
Case Else
' should I put a Return <value> line here? …Run Code Online (Sandbox Code Playgroud) 我需要检索一个设置(使用Swift):
var highScoreNumber: NSInteger = 0
var returnValue: [NSInteger]? = NSUserDefaults.standardUserDefaults().objectForKey("food") as? [NSInteger]
if (returnValue != nil) {
highScoreNumber = returnValue as NSInteger
}
Run Code Online (Sandbox Code Playgroud)
我试过这个和代码的其他变体,我总是得到
'NSInteger的?' 不能转换为'NSInteger'
这是我第一次涉足Swift,所以
我想在一个ViewController上有多个NSTableViews.我用以下代码实现了第一个TableView:
class MainViewController: NSViewController
{
@IBOutlet weak var tableView: NSTableView!
override func viewDidLoad()
{
super.viewDidLoad()
let nib = NSNib(nibNamed: "MyCellView", bundle: NSBundle.mainBundle())
tableView.registerNib(nib!, forIdentifier: "MyCellView")
let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
appDelegate.view = self
}
}
extension MainViewController: NSTableViewDataSource, NSTableViewDelegate
{
func numberOfRowsInTableView(tableView: NSTableView) -> Int
{
return 5
}
func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat
{
return 25
}
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
let cell = tableView.makeViewWithIdentifier("MyCellView", owner: self) as! …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何在OS中按下按钮时只显示标签.我知道如何操作触摸事件,但我不知道如何将UILongPressGestureRecognizer纳入其中.
所以我开始学习Grand Central Dispatch的基础知识以及iOS应用程序的多线程概念.每个教程都会告诉您必须在主线程上运行UI事件,但我不完全理解为什么.
这是我昨天遇到的一个问题,最后通过在主线程上运行segue来修复它,但我仍然不明白为什么从主线程运行它是一个问题:
我有一个自定义的初始VC(条形码扫描仪)和一个带有UIWebView附加的新视图控制器的segue .一旦VC找到条形码,它就会调用一个处理程序,在那个封口中,我有了一个performSegueWithIdentifier.但是,我得到了EXC_BAD_ACCESS,因为这个(当第二VC有一个标签,或者它没有发生UIImageView,只是用UIWebView).我终于意识到由于某种原因,闭包被称为主线程,因此segue正在主线程上执行.为什么要在另一个线程上执行segue会引发内存错误?是因为self在self.performSegueWithIdentifier某种程度上是零吗?为什么Swift不会自动在主线程上发送segue事件?
以下表达式之间有什么区别吗?
if someInstance is SomeClass {
}
if someInstance.isKindOfClass(SomeClass) {
}
Run Code Online (Sandbox Code Playgroud) 这是我的代码:
class CustomAlertAction: UIAlertAction {
init(title : String) {
super.init(title: title, style: UIAlertActionStyle.Default) { (action) -> Void in
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了以下编译错误:
必须调用超类'UIAlertAction'的指定初始值设定项
我知道UIAlertAction的指定初始化程序是init().但是UIAlert的init(标题,样式,处理程序)不会调用它的指定初始化程序init()?
任何的想法?谢谢
PS:基于Apple的文档:
指定的初始化程序必须从其直接超类中调用指定的初始化程序."
这是否意味着不允许在Swift中继承UIAlertAction?在Objective-C中这样做没有问题.
我想创建UIAlertAction的子类的原因是因为我想添加一个ReactiveCocoa命令作为一个动作.
我将NSUserDefault中的UserInfo Dictionary指定为NSMutableDictionary.现在我的dicInfo是可变字典,但它包含的对象是不可变的.因此,当我试图替换这些值时,它会导致崩溃.我附上描述崩溃报告的图像.如果有任何解决方案,如何将可变字典的内部对象转换为可变字典.
swift ×7
ios ×4
optional ×2
nstableview ×1
return-value ×1
uibutton ×1
uikit ×1
uilabel ×1
vb.net ×1