我一直在练习table views
并且我知道如何创建它们但我希望在创建表视图时更好地理解委托和源代码.
在创建表视图时,有人可以解释代理和源的需求吗?
你为什么需要它们?
将委托和源连接到文件所有者或者ViewController
为什么需要连接时会发生什么?
我想我需要一个关于代表和来源的一般性解释以及当你将它们连接到文件所有者时会发生什么ViewController
?
我将在整个应用程序中使用一些字符串名称作为我的通知和用户默认名称。
我听说为了类型安全,将您的notification
名称或UserDefaults
键名称定义为静态字符串并使它们成为类或结构的一部分是一种很好的做法。
处理 Notification 和 UserDefault 名称的字符串名称的最常用方法是什么?
我曾考虑将它们作为全局变量放在我的 AppDelgate 类中,如下所示......
let MY_STRING_NAME = "My string name"
class AppDelegate: UIResponder, UIApplicationDelegate {}
/// Then just use MY_STRING_NAME in other classes.
Run Code Online (Sandbox Code Playgroud)
或者
class SomeClass {
let myStringName:String = "My string name"
}
/// Then use myClassInstance.myStringName
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
我有以下的代码,以防止用户进入一个周期以上.
的UITextField
,它工作正常,但我想这样做与另外两个文本框一样,这可怎么办呢?
我尝试分配delegate
到多个字段并且它不起作用,它只适用于第一个响应的第一个.
class UserInputViewController: UIViewController, UITextFieldDelegate{
override func viewDidLoad() {
super.viewDidLoad()
self.myTextField.delegate = self
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let periodsInTextField = myTextField.text!.componentsSeparatedByString(".").count - 1
if (periodsInTextField > 0 && string == "."){
return false
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
编辑(答案):这是基于@KKRocks的答案,如何做到这一点.
class UserInputViewController: UIViewController, UITextFieldDelegate{
override func viewDidLoad() {
super.viewDidLoad()
self.myTextField.delegate = self
self.secondTextField.delegate = self
self.thirdTextField.delegate = self
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, …
Run Code Online (Sandbox Code Playgroud) 我希望能够限制可以输入到文本字段中的字符,例如,我只想限制1-5个数字(1、2、3和5),并且如果用户输入的数字大于5 ,我希望textField不执行任何操作。
我已经看到了如何限制长度,但是如上所述,我找不到任何用于限制某些字符的内容。
我尝试使用,editingQtyFieldChanged
但并不能完全满足我的要求。
myField.addTarget(self, action: #selector(UserInputViewController.fieldChanged), forControlEvents: UIControlEvents.EditingChanged)
func fieldChanged(){
let number = Int(myField.text!)
if number < 2{
print("Number not allowed")
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift的uitextfield中仅限制数字1-5?
编辑:这是我的解决方案,这要归功于该线程。
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let numbers = ["6","7","8", "9"]
for number in numbers{
if string == number{
return false
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的一个项目从Swift 2.3转换为Swift 3.0,但有些原因我得到以下错误...
无法使用类型'的参数列表调用'dataTask'(使用:NSMutableURLRequest,completionHandler:(Data?,UIRLResponse?,NSError) - > Void)'
这些部分匹配的参数列表存在'dataTask'的重载:( with:URLRequest,completionHandler:@escaping(Data?,URLResponse?,Error?) - > Void),(with:URL,completionHandler:@escaping(Data?, URLResponse?,错误?) - > Void)
错误在下面的代码中显示在此行中...
let task = session.dataTask(with: request, completionHandler: { (responseData:Data?, response:URLResponse?, error:NSError?) -> Void in
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
以下是发生错误的函数的完整代码.
func verifyReceipt(_ transaction:SKPaymentTransaction?){
let receiptURL = Bundle.main.appStoreReceiptURL!
if let receipt = try? Data(contentsOf: receiptURL){
//Receipt exists
let requestContents = ["receipt-data" : receipt.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))]
//Perform request
do {
let requestData = try JSONSerialization.data(withJSONObject: requestContents, options: JSONSerialization.WritingOptions(rawValue: 0))
//Build URL Request
let storeURL = URL(string: "https://buy.itunes.apple.com/verifyReceipt")// production URL
//let …
Run Code Online (Sandbox Code Playgroud) 从已经具有初始化程序的类继承时,如何添加自定义初始值设定项?
我所拥有的是一个Vehicle
有一个参与的itializer 的类name
.我想要做的是继承这个Vehicle
类,为新类创建另一个初始化器,但继续使用现有的初始化器.
class Vehicle{
var make:String
init(make:String){
self.make = make
}
}
Run Code Online (Sandbox Code Playgroud)
// Not sure how to structure this class
class Car:Vehicle {
var engine:Double
override init(){
super.init()
}
init(engine:Double){
self.engine = engine
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我希望能够做到的...重新使用现有的初始化程序和新的初始化程序.
let cobalt = Car(make:"Chevy" engine: 2.5)
Run Code Online (Sandbox Code Playgroud) 我有一个双精度值,我想显示为一个字符串,但小数点前没有零。
以下代码删除了与我想要的相反的内容,它删除了小数点后的所有数字。
let myDouble = 0.77
var myStringDouble = String(myDouble)
if let dotRange = myStringDouble.range(of: ".") {
myStringDouble.removeSubrange(dotRange.upperBound..<myStringDouble.endIndex)
}
print(myStringDouble)
// ideal result based on double 0.77 would be .77
Run Code Online (Sandbox Code Playgroud)
如何删除双精度/字符串中小数点前的所有零?
在以下两种情况下,RevenueCat 中的正确配置是什么?
如果我有非消耗性应用内购买和自动续订订阅,正确的配置是什么?我是否需要两项单独的权利并为每一项提供一个产品?
如果我有一个非消耗性应用内购买和两个自动续订订阅(每月和每年),那么正确的配置是什么?我是否需要两项权利,一项用于包含两项产品的自动续订订阅,一项用于包含一项产品的非消耗品?
谢谢!
我一直试图理解C语言中结构体的使用,以便对编程概念有一个更好的理解,结构体对我来说有些混乱; 它很容易学习语法,但很难确定为什么以及何时使用它们,我认为结构只是C编程语言中的另一个工具,因为看起来你可以完成你想要的任何东西,而不需要使用结构.同样,这是我到目前为止的想法,因为我不完全理解它们.
除了使用结构创建一个唯一的数据类型之外,结构和散列/字典之间的区别是什么?
选择结构的主要好处是什么?
将结构视为哈希或词典是否有意义?
再一次,我只是想更好地理解C中结构的概念.
谢谢
swift ×7
ios ×3
uitextfield ×2
c ×1
c++ ×1
dictionary ×1
hash ×1
inheritance ×1
init ×1
ios6 ×1
iphone ×1
objective-c ×1
revenuecat ×1
string ×1
struct ×1
subclass ×1
swift3 ×1
uitableview ×1